Gostaria apenas de publicar minha resolução desses exercícios propostos. Fui utilizando a convenção de botar o underscore antes dos atributos para indicar que eles são privadosm e fui me acostumando a usar as @property para visualizar e alterar o valor deles. Acho que compliquei mais do que o necessário, mas o resultado parece certo.
Criei dois arquivos, o livro.py que ficou apenas toda a definição da classe, e o arquivo biblioteca.py que ficou todos os instanceamentos dos objetos e os testes dos métodos que foram propostos nos exercícios.
O arquivo livro.py ficou assim:
class Livro:
livros = []
def __init__(self, titulo: str, autor: str, ano_publicacao: int):
self._titulo = titulo
self._autor = autor
self._ano_publicacao = ano_publicacao
self._disponivel = True
Livro.livros.append(self)
@property
def titulo(self) -> str:
return self._titulo
@property
def autor(self) -> str:
return self._autor
@property
def ano_publicacao(self) -> int:
return self._ano_publicacao
@property
def disponivel(self) -> bool:
return self._disponivel
@disponivel.setter
def disponivel(self, valor):
if isinstance(valor, bool):
self._disponivel = valor
else:
raise ValueError("Disponibilidade deve ser um valor booleano")
def __str__(self):
status = 'Sim' if self.disponivel else 'Não'
return f'Título: {self.titulo.ljust(25)} | Autor: {self.autor.ljust(25)} | Ano de Publicação: {str(self.ano_publicacao).ljust(25)} | Diponível: {status}'
def emprestar(self):
self.disponivel = False
@classmethod
def verificar_disponibilidade(cls, ano: int):
livros_disponiveis = []
for livro in cls.livros:
if livro.ano_publicacao == ano and livro.disponivel == True:
livros_disponiveis.append(livro)
return livros_disponiveis
E o arquivo biblioteca.py ficou assim:
from livro import Livro
import os
def main():
livro1 = Livro('Morro dos Ventos Uivantes', 'Emily Brontë', 1847)
livro2 = Livro('Macunaíma', 'Mário de Andrade', 1928)
livro3 = Livro("O Senhor dos Anéis", "J.R.R. Tolkien", 1954)
livro4 = Livro("O Hobbit", "J.R.R. Tolkien", 1937)
livro5 = Livro("A Revolução dos Bichos", "George Orwell", 1945)
livro6 = Livro("1984", "George Orwell", 1949)
print(f'{'-' * 30} Exercício 2 {'-' * 30}')
print(livro1)
print(livro2)
print()
print(f'{'-' * 30} Exercício 3 {'-' * 30}')
livro1.emprestar()
print(livro1)
print()
print(f'{'-' * 30} Exercício 4 {'-' * 30}')
livros_encontrados = Livro.verificar_disponibilidade(1954)
if livros_encontrados:
print('Livros encontrados:')
for livro in livros_encontrados:
print(livro)
else:
print('Nenhum livro encontrado para este ano.')
print()
if __name__ == '__main__':
os.system('cls')
main()
E a saída no terminal foi essa: