Classe generica

This commit is contained in:
Emersonjsc 2025-07-06 22:58:09 -03:00
parent 50b23b07ef
commit 8b96e873ee
1 changed files with 23 additions and 16 deletions

View File

@ -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."