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 描述符