class Entero:
def __init__(self, nombre):
self.nombre = nombre
def __get__(self, instancia, clase):
if instancia is None:
return self
else:
return instancia.__dict__[self.nombre]
def __set__(self, instancia, valor):
if not isinstance(valor, int):
raise TypeError('Se requiere un argumento de tipo entero.')
instancia.__dict__[self.nombre] = valor
def __delete__(selfself, instancia):
del instancia.__dict__[self.nombre]
class Punto:
x = Entero('x')
y = Entero('y')
def __init__(self, x, y):
self.x = x
self.y = y
if __name__ == '__main__':
punto = Punto(2, 5)
print(punto.x, punto.y) # Invocación implicita de Punto.x.__get__(punto, Punto)
punto.x = 3 # Invocación de Punto.x.__set__(punto, 3)
punto.y = 5.3 # Invocación de Punto.y.__set__(punto, 5.3)