1) Herencia: cuándo sí tiene sentido
Úsala cuando exista una relación de tipo real y estable.
Si una subclase rompe reglas de la clase base o ignora parte de su contrato, la jerarquía está mal diseñada.
La herencia puede ser útil para compartir comportamiento común en un dominio bien definido.
Evita cadenas profundas de herencia; complican lectura y depuración.
class Usuario:
def permisos(self) -> set[str]:
return {'leer'}
class Admin(Usuario):
def permisos(self) -> set[str]:
return super().permisos() | {'editar', 'borrar'}