descriptor协议?property的实现?Python的descriptor协议?property的实现?
Descriptor 是实现了 __get__、__set__、__delete__ 中至少一个的对象。当作为类属性被访问时,解释器会调用这些方法:a.x 触发 type(a).__dict__['x'].__get__(a, type(a))。用于实现 property、方法绑定、staticmethod、classmethod 等。
property(fget, fset, fdel, doc) 返回一个 descriptor:其 __get__ 调 fget(instance)、__set__ 调 fset(instance, value)。即「属性访问」被转成函数调用,从而可做计算、校验、懒加载等。等价于在类里放一个实现 __get__/__set__ 的 descriptor 对象。
用 @property 装饰器定义只读或读写「属性」;只读可只写 __get__;只写需同时有 __set__(少见)。自定义 descriptor 可做类型检查、缓存、懒加载;注意区分数据 descriptor(有 __set__)与非数据 descriptor(仅 __get__),前者在实例字典之前参与查找。
| 返回模块 | 返回总览 |