07 Python描述符笔记
Python类定义的时候,在类的内部通过定义描述符,控制类和实例在`set`, `delete`, `get`是的行为;
通过.操作符获取数据描述符的优先级:
1. 数据描述符:定义了__set__或者__delete__的类属性对象
2. instance.__dict__
3. 非数据描述符: 只定义了__get__
示例:
class Descriptor:
def __get__(self, instance, owner):
print(f"获取: instance={instance}, owner={owner}")
return "some_value"
def __set__(self, instance, value):
print(f"设置: instance={instance}, value={value}")
def __delete__(self, instance):
print(f"删除: instance={instance}")
class MyClass:
attr = Descriptor()
典型用法:
1. 底层方法绑定self, class的实现,所有的类方法都是具备__get__的非数据描述符;
2. property的实现;
3. 实现只读属性,或者只写属性机制;