From 8b96e873eee08ea404a101675a82a7934486fccc Mon Sep 17 00:00:00 2001 From: Emersonjsc Date: Sun, 6 Jul 2025 22:58:09 -0300 Subject: [PATCH] Classe generica --- persistencia/persistente.py | 39 ++++++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/persistencia/persistente.py b/persistencia/persistente.py index 95f62f2..6eb0fdb 100644 --- a/persistencia/persistente.py +++ b/persistencia/persistente.py @@ -1,29 +1,36 @@ +from typing import Generic, TypeVar, List from persistencia.excecoes import EntidadeNaoEncontradaException +from modelo.entidade import Entidade -class Persistente: +T = TypeVar('T', bound=Entidade) + +class Persistente(Generic[T]): def __init__(self): - self.lista = [] + self.__lista: List[T] = [] - def inserir(self, obj): - self.lista.append(obj) + def inserir(self, obj: T) -> None: + self.__lista.append(obj) - def alterar(self, id_, novo_obj): - antigo = self.buscar_por_id(id_) - self.lista.remove(antigo) - self.lista.append(novo_obj) + def alterar(self, id_: int, novo_obj: T) -> None: + if id_ != novo_obj.id: + raise ValueError("O id do novo objeto deve ser o mesmo do objeto a ser alterado.") + + antigo_obj = self.buscar_por_id(id_) + index = self.__lista.index(antigo_obj) + self.__lista[index] = novo_obj - def remover(self, id_): + def remover(self, id_: int) -> None: obj = self.buscar_por_id(id_) - self.lista.remove(obj) + self.__lista.remove(obj) - def buscar_por_id(self, id_): - for obj in self.lista: + def buscar_por_id(self, id_: int) -> T: + for obj in self.__lista: if obj.id == id_: return obj raise EntidadeNaoEncontradaException(f"ID não encontrado: {id_}") - def listar_todos(self): - return self.lista + def listar_todos(self) -> List[T]: + return self.__lista - def __str__(self): - return "\n".join(str(obj) for obj in self.lista) + def __str__(self) -> str: + return f"Persistente para o tipo '{T}' com {len(self.__lista)} objetos." \ No newline at end of file