自定制property、延时功能和补充

@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)
用描述符自定制property

猜你喜欢

转载自www.cnblogs.com/jintian/p/10958793.html