码迷,mamicode.com
首页 > 其他好文 > 详细

描述器

时间:2019-05-25 00:11:03      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:对象属性   delete   int   value   file   set   delattr   setattr   val   

描述器

描述器是一个具有“绑定行为”的对象属性,该对象的属性访问通过描述器协议覆盖:__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):
        #   访问描述器属性时,此方法被触发
        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

 

描述器

标签:对象属性   delete   int   value   file   set   delattr   setattr   val   

原文地址:https://www.cnblogs.com/lzh501/p/10920713.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!