import math class PropiedadTardia: def __init__(self, funcion): self.funcion = funcion def __get__(self, instancia, clase): if instancia is None: return None else: valor = self.funcion(instancia) setattr(instancia, self.funcion.__name__, valor) return valor class Circulo: def __init__(self, radio): self.radio = radio @PropiedadTardia def area(self): print('Computando el área...') return math.pi * self.radio ** 2 @PropiedadTardia def perimetro(self): print('Computando el perímetro...') return 2 * math.pi * self.radio circulo = Circulo(3.0) print(circulo.radio) print(circulo.area) print(circulo.area) print(circulo.perimetro) print(circulo.perimetro)