描述器

描述器

描述器是一个具有“绑定行为”的对象属性,该对象的属性访问通过描述器协议覆盖:__get__(),__set__(),__delete__(),

如果一个对象定义这些方法中的任何一个,它就被称为一个描述器;

class Filed:
    #    一个类中,只要定义了下面这三个方法中的任意一个就被称为描述器
    def __get__(self, instance, owner):
        pass
    def __set__(self, instance, value):
        pass
    def __delete__(self, instance):
        pass

一个简单的描述器应用例子:

class Filed:
    def __get__(self, instance, owner):  #  owner:是添加描述器属性的类,在这里为:Model类
        #   访问描述器属性时,此方法被触发
        print("触发描述器的__get__方法")
        return self.value

    def __set__(self, instance, value):
        #   设置描述器属性时,此方法被触发
        #   self:描述器对象,在这里为:Filed()
        #   instance:调用描述器对象的实例对象,在这里为:Model()
        #   value:属性值,在这里为:100
        print("触发描述器的__set__方法")
        self.value = value

    def __delete__(self, instance):
        #   删除描述器属性时,此方法被触发
        print("触发描述器的__delete__方法")
        self.value = None

class Model:
    name = "yeweiyin"
    attr = Filed()  #  描述器对象,会覆盖类属性的相关操作(get-->getattr/getattribute,set--->setattr,delete--->delattr)

m = Model()
m.attr = 100  #  触发描述器Filed()的__set__()方法
print(m.attr)  #  触发描述器Filed()的__get__()方法
del m.attr  #  触发描述器Filed()的__delete__()方法
print(m.attr)

执行结果:
触发描述器的__set__方法
触发描述器的__get__方法
100
触发描述器的__delete__方法
触发描述器的__get__方法
None

 

posted @ 2019-05-24 23:16  天涯——咫尺  阅读(276)  评论(0编辑  收藏  举报