class Persona: def __init__(self, nombre): self.nombre = nombre @property def nombre(self): return self._nombre @nombre.setter def nombre(self, valor): if not isinstance(valor, str): raise TypeError('Se requiere una cadena de caracteres.') self._nombre = valor @nombre.deleter def nombre(self): raise AttributeError('No se puede borrar este atributo.') class SubPersona(Persona): @property def nombre(self): print('Recuperando nombre') return super().nombre @nombre.setter def nombre(self, valor): print('Asignando nuevo nombre') super(SubPersona, SubPersona).nombre.__set__(self, valor) @nombre.deleter def nombre(self): print('Borrando atributo nombre') super(SubPersona, SubPersona).nombre.__delete__(self) p = SubPersona('Einstein') print(p.nombre) # Produce error: #p.nombre = 13