1
resposta

Hora da prática: criando classes, construtores e métodos

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:
    def __init__(self, titulo, autor, ano_publicacao):
        self.titulo = titulo
        self.autor = autor
        self.ano_publicacao = ano_publicacao
        self.disponivel = True

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'Livro: {self.titulo} | Autor: {self.autor} | Ano de Publicação: {self.ano_publicacao}'

livro1 = Livro('Orgulho e Preconceito','Jane Austen', 1813)
livro2 = Livro('Solaris','Stanislaw Lem', 1961)


print(livro1)
print(livro2)

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
        
print(livro1)
livro1.emprestar()
print(f'Status : {livro1.disponivel}')
print(livro2)
livro2.emprestar()
print(f'Status : {livro2.disponivel}')

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_disponibilidade(ano):
        livros_disponiveis = [livro for livro in Livro.livros if livro.ano_publicacao == ano and livro.disponivel]
        return livros_disponiveis

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

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.

livro_biblioteca = Livro('Orgulho e Preconceito','Jane Austen', 1813)
print(f"Antes de emprestar : Livro disponível? {livro_biblioteca.disponivel}")
livro_biblioteca.emprestar()
print(f"Depois de emprestar: Livro disponível? {livro_biblioteca.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_ano_publicacao = 1813
livro_disponivel = Livro.verificar_disponibilidade(livro_ano_publicacao)
print(f'Os livros publicados em {livro_ano_publicacao} disponiveis: {livro_disponivel}')

8-Crie um arquivo chamado main.py, importe a classe Livro e, no arquivo main.py, instancie dois objetos da classe Livro e exiba a mensagem formatada utilizando o método str.

from livro import Livro

livro1 = Livro('Orgulho e Preconceito','Jane Austen', 1813)
livro2 = Livro('Solaris','Stanislaw Lem', 1961)


print(livro1)
print(livro2)
1 resposta

Oi, Marcia! Como vai?

Você estruturou muito bem a classe Livro, implementando construtor, métodos de instância e o método especial __str__. Isso mostra domínio da composição de objetos em Python. Ficou claro também o seu esforço em integrar os conceitos entre os arquivos.

Uma dica interessante para o futuro é usar um atributo de classe para armazenar todos os objetos criados. Assim, o método verificar_disponibilidade poderá acessá-los corretamente. Veja este exemplo:


class Livro:
    livros = []

    def __init__(self, titulo, autor, ano_publicacao):
        self.titulo = titulo
        self.autor = autor
        self.ano_publicacao = ano_publicacao
        self.disponivel = True
        Livro.livros.append(self)

Esse código adiciona cada novo livro à lista Livro.livros, permitindo que o método estático funcione corretamente.

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