livro.py
from __future__ import annotations
from typing import ClassVar
class Livro:
livros: ClassVar[list["Livro"]] = []
def __init__ (self, titulo: str, autor: str, ano_publicado: int) -> None:
self._titulo: str = titulo
self._autor: str = autor
self._ano_publicado: int = ano_publicado
self._disponivel: bool = True
Livro.livros.append(self)
def __str__(self) -> str:
return(
f"{self._titulo.ljust(25)} |"
f"{self._autor.ljust(25)} |"
f"{str(self._ano_publicado).ljust(25)}"
)
@classmethod
def lista_de_livros(cls) -> str:
cls.livros.sort(key=lambda livro: (livro.ano, livro.titulo))
cabecalho = (
f"{'Titulo'.ljust(25)} |"
f"{'Autor'.ljust(25)} |"
f"{'Ano publicado'.ljust(25)}"
)
linhas = ["-" * len(cabecalho), cabecalho, "-" * len(cabecalho)]
linhas.extend(str(livro) for livro in cls.livros)
return "\n".join(linhas)
@property
def titulo(self) -> str:
return self._titulo
@property
def autor(self) -> str:
return self._autor
@property
def ano(self) -> int:
return self._ano_publicado
@property
def status(self) -> str:
return (f"\nO livro {self.titulo} está Disponivel" if self._disponivel else f"O livro {self.titulo} está Indisponivel")
def emprestar(self) -> None:
if not self._disponivel:
print("\nLivro indisponivel no momento")
return
print(f"\nLivro {self.titulo} foi emprestado com sucesso!")
self._disponivel = False
def devolver(self) -> None:
if self._disponivel:
print("\nLivro ja foi devolvido")
return
print(f"\nLivro {self.titulo} foi devolvido com sucesso!")
self._disponivel = True
@staticmethod
def verificar_disponibilidade_ano(ano: int) -> list["Livro"]:
livros_disponiveis = []
for livro in Livro.livros:
if livro.ano == ano and livro._disponivel:
livros_disponiveis.append(livro)
return livros_disponiveis
@classmethod
def disponibilidade_ano(cls, ano: int) -> None:
livros = cls.verificar_disponibilidade_ano(ano)
if livros:
print(f"\nOs livros disponíveis de {ano} são: ")
for livro in livros:
print(f" - {livro.titulo} - {livro.autor}")
else:
print(f"\nNão há livros disponíveis de {ano}")
biblioteca.py
from modelos.livro import Livro
livro1 = Livro("Dom Casmurro", "Machado de Assis", 1899)
livro2 = Livro("Coraline", "Neil Gaiman", 2002)
livro3 = Livro("A Vida de Pi", "Yann Martel", 2002)
livro4 = Livro("O Livro das Ilusões", "Paul Auster", 2002)
livro5 = Livro("Ressurreição", "Leo Tolstoy", 1899)
print(Livro.lista_de_livros())
livro1.emprestar()
print(livro1.status)
Livro.disponibilidade_ano(2000)
Livro.disponibilidade_ano(1899)
main.py
from modelos.livro import Livro
livro6 = Livro("Contos da Carochinha", "Alberto Figueiredo", 1896)
livro7 = Livro("Rã e Sapo são amigos", "Arnold Lobel", 1970)
print(livro6)
print(livro7)