Python 描述符(Descriptors)是 Python 中的一个高级特性,它允许我们定义对象的属性,并控制对这些属性的访问和修改。描述符可以用来实现类似属性的装饰器功能,也可以用来创建更复杂的数据结构。

什么是描述符?

描述符是 Python 中的一个特殊对象,它定义了对象的属性的行为。当一个属性被访问或修改时,描述符会介入并执行特定的操作。

描述符的类型

  • 数据描述符(Data Descriptors):用于定义普通的属性。
  • 非数据描述符(Non-Data Descriptors):用于定义方法或属性。

数据描述符

数据描述符通常用于定义普通的属性,如 __get____set____delete__ 方法。

class Person:
    def __init__(self, name):
        self._name = name

    @property
    def name(self):
        return self._name

    @name.setter
    def name(self, value):
        self._name = value

    @name.setter
    def name(self, value):
        self._name = value

    @name.setter
    def name(self, value):
        self._name = value


p = Person("Alice")
print(p.name)  # 输出: Alice
p.name = "Bob"
print(p.name)  # 输出: Bob

非数据描述符

非数据描述符通常用于定义方法或属性,如 __getattr____setattr____delattr__ 方法。

class Person:
    def __init__(self, name):
        self._name = name

    def __getattr__(self, item):
        if item == "age":
            return 30
        raise AttributeError(f"'{self.__class__.__name__}' object has no attribute '{item}'")

# 使用非数据描述符
p = Person("Alice")
print(p.age)  # 输出: 30

扩展阅读

了解更多关于 Python 描述符的信息,可以参考 Python 描述符教程

Python 描述符