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. 实现只读属性,或者只写属性机制;