zoukankan      html  css  js  c++  java
  • 描述器

    描述器

    描述器是一个具有“绑定行为”的对象属性,该对象的属性访问通过描述器协议覆盖:__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
  • 相关阅读:
    甲醛(Formaldehyde)
    Node Embedding
    受限玻尔兹曼机(RBM, Restricted Boltzmann machines)和深度信念网络(DBN, Deep Belief Networks)
    长尾分布,重尾分布(Heavy-tailed Distribution)
    SVD分解与数据压缩
    Batch Normailzation
    Attention Mechanism
    新装的Ubuntu在Nvidia显卡上分辨率不对
    人工神经网络(Artificial Neural Network)
    Xdebug+phpstorm配置
  • 原文地址:https://www.cnblogs.com/lzh501/p/10920713.html
Copyright © 2011-2022 走看看