【python】属性描述符

301 阅读1分钟

描述符用于将访问对象属性转变成调用描述符方法

__get__、__set__以及__delete__任意实现其一就实现属性描述符

描述器的主要目的是提供一个挂钩,允许存储在类变量中的对象控制在属性查找期间发生的情况。

在属性查找期间,描述器由点运算符调用。如果使用 vars(some_class)[descriptor_name] 间接访问描述器,则返回描述器实例而不调用它。

描述器的使用贯穿了整个语言。就是它让函数变成绑定方法。常见工具诸如 classmethod()staticmethod()property()functools.cached_property() 都作为描述器实现。

class Descriptor(object):    def __get__(self, obj, objtype):        print "get value=%s" % self.val         return self.val​    def __set__(self, obj, val):        print "set value=%s" % val        self.val = valclass Stu(object):    age = Descriptor()​stu = Stu()stu.age = 12    # set value=12, obj=Stu()print stu.age   # get value=12, obj=Stu(), objtype=Stu                # 12