描述器

Posted lzh501

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了描述器相关的知识,希望对你有一定的参考价值。

描述器

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

 

以上是关于描述器的主要内容,如果未能解决你的问题,请参考以下文章

损坏的顶点和片段着色器

VSCode自定义代码片段6——CSS选择器

如何使用Android片段管理器传递变量[重复]

如何在片段着色器中平铺部分纹理

Android:使用支持片段管理器时复制片段

Android - 片段中的联系人选择器