Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Resolução de Atividades - 07 Hora da prática: criando classes, construtores e métodos

Nota: Tentei deixar essa formatação por envolver vários arquivos distintos, ficou bom?

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.

models\livro.py


class Livro:

    lista_livros = []

    def __init__ (self, titulo = "", autor = "", ano_publicacao = 0):

        self._titulo = titulo
        self._autor = autor
        self._ano_publicacao = ano_publicacao
        self._disponibilidade = True
        Livro.lista_livros.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.ljust(25)} | {self._autor.ljust(25)} | {str(self._ano_publicacao).ljust(25)} | {'Disponível' if self._disponibilidade else 'Indisponível'}" 
    
RWBB = Livro ("Vermelho, Branco e Sangue Azul", "Tahereh Mafi", 2015)
Amor_e_Gelato = Livro ("Amor e Gelato", "Jenna Evans Welch", 2016)
Til = Livro ("Til", "José de Alencar", 1872)
As_Furias_Invisiveis_do_Coração = Livro ("As Fúrias Invisíveis do Coração", "John Boyne", 2017)
Acre = Livro ("Acre", "Lucrecia Zappi", 2017)
Me_Chame_Pelo_Seu_Nome = Livro ("Me Chame Pelo Seu Nome", "André Aciman", 2007)
As_Mil_Partes_do_Meu_Coracao = Livro ("As Mil Partes do Meu Coração", "Jandy Nelson", 2014)
O_Segredo_de_Helena = Livro ("O Segredo de Helena", "Lucinda Riley", 2019)

print (RWBB)
print (Amor_e_Gelato)



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_livro (self):

        self._disponibilidade = False
        
RWBB.emprestar_livro()

print (RWBB)



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 # É assim que utiliza um método estático? Não foi ensinado no curso, então peguei da internet

    def verificar_disponibilidade (ano):

        lista_livros_disponiveis = []

        for livro_iterador in Livro.lista_livros:

            if livro_iterador._ano_publicacao == ano:

                lista_livros_disponiveis.append(livro_iterador)

        print (f"Livros disponíveis em {ano}: {', '.join([f'{livro._titulo} - {livro._autor}' for livro in lista_livros_disponiveis]) if lista_livros_disponiveis else 'Nenhum livro disponível neste ano.'}")

Livro.verificar_disponibilidade (2017)



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

models\biblioteca.py


from livro 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.

models\livro.py


    @classmethod

    def escolher_livro (cls, titulo):

        for livro_iterador in cls.lista_livros:

            if livro_iterador._titulo == titulo:

                return livro_iterador
            
        return "Livro não encontrado"

models\biblioteca.py


livro_escolhido = Livro.escolher_livro("Acre")

print ("Livro disponível: ", livro_escolhido)

livro_escolhido.emprestar_livro()

print ("Livro disponível: ", livro_escolhido)



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.verificar_disponibilidade(2014)



8 - 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.

main.py


from models.livro import Livro

def main():

    RWBB = Livro ("Vermelho, Branco e Sangue Azul", "Tahereh Mafi", 2015)
    Amor_e_Gelato = Livro ("Amor e Gelato", "Jenna Evans Welch", 2016)
    Til = Livro ("Til", "José de Alencar", 1872)
    As_Furias_Invisiveis_do_Coração = Livro ("As Fúrias Invisíveis do Coração", "John Boyne", 2017)
    Acre = Livro ("Acre", "Lucrecia Zappi", 2017)
    Me_Chame_Pelo_Seu_Nome = Livro ("Me Chame Pelo Seu Nome", "André Aciman", 2007)
    As_Mil_Partes_do_Meu_Coracao = Livro ("As Mil Partes do Meu Coração", "Jandy Nelson", 2014)
    O_Segredo_de_Helena = Livro ("O Segredo de Helena", "Lucinda Riley", 2019)

    print (RWBB)
    print (O_Segredo_de_Helena)


if "__name__" == "__main__":

    main()
1 resposta

Olá, Victor! Como vai?

Parabéns pela resolução da atividade!

Vi que você explorou a classe Livro para estruturar objetos com Python, utilizou muito bem o método especial str para formatar a saída e ainda compreendeu a importância da organização em múltiplos arquivos para manter o projeto escalável e claro.

Continue postando as suas soluções, com certeza isso ajudará outros estudantes e tem grande relevância para o fórum.

Se quiser aprofundar ainda mais, algumas boas práticas são:

  • Encapsulamento: utilizar propriedades (@property) para controlar acesso a atributos privados.
  • Estrutura modular: separar responsabilidades em arquivos distintos para facilitar manutenção e testes.
  • Métodos estáticos e de classe: aplicar corretamente para funcionalidades que não dependem de instâncias.

Alguns materiais podem estar em inglês, mas é possível compreendê-los usando o recurso de tradução de páginas do próprio navegador.

Ah, uma pergunta: Você acha que organizar o projeto em múltiplos arquivos ajuda mais na clareza do código para aprendizado ou na escalabilidade para projetos maiores e complexos?

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

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