Olá, Cauã! Como vai?
Você está enfrentando dificuldade com o uso do @staticmethod porque o método está acessando um atributo que não existe. O problema aqui é que, na sua classe, o atributo se chama _disponivel, mas no método estático você usa livro.disponivel.
Um método estático não depende de um objeto específico (self). Ele trabalha com dados que você passa como parâmetro ou com atributos da própria classe. Neste ponto, ele percorre a lista Livro.todos_livros e filtra os livros conforme a regra definida.
Ajuste seu código assim:
@staticmethod
def verificar_disponibilidade(ano):
return [
livro
for livro in Livro.todos_livros
if livro.ano_publicacao == ano and livro._disponivel
]
Esse código percorre todos os livros cadastrados, verifica se o ano de publicação é o informado e se o livro ainda está disponível.
Veja este exemplo de uso do método estático:
livros_disponiveis_2018 = Livro.verificar_disponibilidade(2018)
for livro in livros_disponiveis_2018:
print(livro)
Neste exemplo, o método é chamado diretamente pela classe Livro, sem precisar criar um objeto. Ele retorna apenas os livros disponíveis daquele ano.
Pontos importantes:
- @staticmethod não usa
self - Ele acessa dados da classe, como Livro.todos_livros
- Deve usar exatamente o nome dos atributos definidos na classe
Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição.
Abraços e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.