2
respostas

Resolução

Pro exercício 4, eu desenvolvi um método de classe.. Estaria errado?

    @classmethod
    def verificar_disponibilidade(cls, ano_procurado):
        mensagem_exibida = False
        for livro in cls.livros:
            if livro._disponivel and ano_procurado == livro._ano_publicacao:
                print(livro._titulo)
                mensagem_exibida = True

        if mensagem_exibida == False:
            print('Desculpe. Não temos livros publicados no ano desejado disponíveis.')
2 respostas

Oi, Mitsuyoshi! Tudo bem?

No exercício 4, precisamos adicionar um método estático chamado verificar_disponibilidade à classe Livro. No entanto, temos no código enviado um método de classe (usando @classmethod) em vez de um método estático (usando @staticmethod).

A diferença principal entre um método de classe e um método estático é que o método de classe recebe a classe como primeiro argumento (normalmente chamado de cls), enquanto o método estático não recebe automaticamente nenhum argumento relacionado à classe ou instância.

Aqui está uma sugestão de como podemos implementar o método estático conforme o enunciado:


    @staticmethod
    def verificar_disponibilidade(ano_procurado):
        livros_disponiveis = [
            livro._titulo for livro in Livro.livros
            if livro._disponivel and livro._ano_publicacao == ano_procurado
        ]
        return livros_disponiveis

Ou até mesmo da seguinte forma:

    @staticmethod
    def verificar_disponibilidade(ano):
        livros_disponiveis = [livro for livro in Livro.livros if livro.ano_publicacao == ano and livro.disponivel]
        return livros_disponiveis

    Livro.livros = [livro1, livro2, livro3] 

Espero ter ajudado!

Um forte abraço e bons estudos!

Fiquei meio confuso nessa segunda resolução. Por que adicionar os livros à Livro.livros, sendo que no construtor já está fazendo isso assim que instancia um novo livro?