@property #area=property(area)
描述符是来描述别人的,代理别人的属性,别人是一个类,类会衍生两个产品(instance,owner),这两个都可以调用描述符get方法,instance返回自己,owner返回None
实现延时功能:延迟计算也称惰性计算
self.func.__name__ 调用函数名字
setattr(instance , self.func.__name__ , res)
@property
def area(): 这两步相当于area=property(area)
m=property(m_get,m_set,m_delete) property是描述器,参数要符合这个顺序(可能与映射有关)
self.m相当于self.m_get 以此类推
@AAA.setter @AAA.delete
def AAA(): def AAA(): 如果只定义静态属性,通过这两个装饰器才可以添加属性和删除属性
class Foo: def __init__(self,func): self.func=func def __set__(self, instance, value): print(123) def __delete__(self, instance): print(456) def __get__(self, instance, owner): print(789) return self.func(instance) class Too: @Foo def area(self): return 111 t1=Too() print(t1.area)