1
resposta

Minha respostas

Respostas do 1 ao 4:

#1 - Crie uma classe chamada Livro com um construtor que aceita os parâmetros titulo, autor e ano_publicacao. Inicie um atributo chamado disponivel como True por padrão.

class Livro:

    biblioteca = []

    def __init__(self, titulo, autor, ano_publicacao):
        self._titulo = titulo
        self._autor = autor
        self._ano_publicacao = ano_publicacao
        self._disponivel = True
        self.biblioteca.append(self)

#2 - Na classe Livro, adicione um método especial str que retorna uma mensagem formatada com o título, autor e ano de publicação do livro. Crie duas instâncias da classe Livro e imprima essas instâncias.

    def __str__(self):
        return f'{self._titulo} | {self._autor} | {self._ano_publicacao}'

#3 - Adicione um método de instância chamado emprestar à classe Livro que define o atributo disponivel como False. Crie uma instância da classe, chame o método emprestar e imprima se o livro está disponível ou não.

    def emprestar(self):
        self._disponivel = False

    @property
    def disponivel(self):
        return 'Disponivel' if self._disponivel else 'Indisponivel'

#4 - Adicione um método estático chamado verificar_disponibilidade à classe Livro que recebe um ano como parâmetro e retorna uma lista dos livros disponíveis publicados nesse ano.
    
    @staticmethod
    def verificar_disponivilidade(ano):
        print(f'Livros disponiveis do ano {ano}:')
        for livro in Livro.biblioteca:
            if livro._ano_publicacao == ano and livro._disponivel:
                print(f'{livro}')

#2
livro1 = Livro('Robert C. Martin','Clean Code: A Handbook of Agile Software Craftsmanship', 2008)
livro2 = Livro('George Orwell', '1984', 1949)
print(livro1)
print(livro2)

#3
livro3 = Livro('Eric Matthes', 'Python Crash Course', 2015)
livro3.emprestar()
print(livro3.disponivel)

#4
livro4_1 = Livro('Eric Matthes', 'Python Crash Course1', 2015)
livro4_2 = Livro('Eric Matthes', 'Python Crash Course2', 2015)
livro4_3 = Livro('Eric Matthes', 'Python Crash Course3', 2015)

Livro.verificar_disponivilidade(2015)

O terminal me retornou
Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Eu criei um arquivo livro_copy.py para limpar e deixar apenas a classe e os metodos:

class Livro:

    biblioteca = []

    def __init__(self, titulo, autor, ano_publicacao):
        self._titulo = titulo
        self._autor = autor
        self._ano_publicacao = ano_publicacao
        self._disponivel = True
        self.biblioteca.append(self)

    def __str__(self):
        return f'{self._titulo} | {self._autor} | {self._ano_publicacao}'

    def emprestar(self):
        self._disponivel = False

    @property
    def disponivel(self):
        return 'Disponivel' if self._disponivel else 'Indisponivel'

    def verificar_disponibilidade(ano):
        print(f'Livros disponiveis do ano {ano}:')
        for livro in Livro.biblioteca:
            if livro._ano_publicacao == ano and livro._disponivel:
                print(f'{livro}')

Entao eu respondi as perguntas 5 à 7 no arquivo biblioteca importando a classe Livro do arquivo livro_copy:

#5 - Crie um arquivo chamado biblioteca.py e importe a classe Livro neste arquivo.

from modelos.livro_copy import Livro

#6 - No arquivo biblioteca.py, empreste o livro chamando o método emprestar e imprima se o livro está disponível ou não após o empréstimo.

livro_1 = Livro('Aprendendo Python', 'Igor', 2025)
livro_1.emprestar()
print(livro_1.disponivel)

#7 - No arquivo biblioteca.py, utilize o método estático verificar_disponibilidade para obter a lista de livros disponíveis publicados em um ano específico.

livro_2005_1 = Livro('Aprendendo Python 1', 'Igor', 2005)
livro_2010_2 = Livro('Aprendendo Python 2', 'Joao', 2010)
livro_2010_3 = Livro('Aprendendo Python 3', 'Lucas', 2010)
livro_2005_4 = Livro('Aprendendo Python 4', 'Miguel', 2010)

Livro.verificar_disponibilidade(2010)
Livro.verificar_disponibilidade(2005)

O terminal me retornou
Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Oi, Igor! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

Seu código já organiza bem os livros e o controle de disponibilidade. O detalhe principal está no nome do método: você usou verificar_disponivilidade, mas depois chamou verificar_disponibilidade. Essa diferença faz com que o Python não reconheça o método.

Outro ponto é manter consistência nos parâmetros (ex.: livro_2005_4 está com ano 2010). Resolva fazendo o seguinte: padronize o nome do método e ajuste os dados.

Uma dica interessante para o futuro é retornar a lista de livros em vez de só imprimir, deixando o método mais flexível. Veja este exemplo:


@staticmethod
def verificar_disponibilidade(ano):
    return [livro for livro in Livro.biblioteca 
            if livro._ano_publicacao == ano and livro._disponivel]

# uso
for l in Livro.verificar_disponibilidade(2010):
    print(l)

Esse código devolve os livros do ano informado e permite reutilizar a lista como quiser.

Parabéns pela dedicação na atividade, continue assim!

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!