描述符是什麼意思
描述符(Descriptor)在Python中是一個特殊的類,它允許你修改Python對屬性的訪問方式。當你嘗試訪問一個對象的屬性時,Python會檢查這個屬性是否為描述符。如果它是,Python會調用描述符的相關方法來提供屬性的值。
描述符有三個主要方法:
__get__()
:當屬性被讀取時調用。__set__()
:當屬性被賦值時調用。__delete__()
:當屬性被刪除時調用。
描述符可以用來實現類似於Python內置類型的行為,例如屬性訪問控制、計數器、觀察者模式等。它們在Python的許多內置類型和標準庫中都有應用,例如property
、method
、data
描述符等。
下面是一個簡單的描述符示例:
class CounterDescriptor:
def __init__(self, initial=0):
self.value = initial
def __get__(self, instance, owner):
if instance is None:
return self
else:
return self.value
def __set__(self, instance, value):
self.value = value
def __delete__(self, instance):
del self.value
class MyClass:
counter = CounterDescriptor()
my_instance = MyClass()
print(my_instance.counter) # 輸出初始值
my_instance.counter = 10
print(my_instance.counter) # 輸出新的值
del my_instance.counter
print(my_instance.counter) # 輸出None,因為屬性已被刪除
在上面的示例中,CounterDescriptor
是一個描述符,它為MyClass
的counter
屬性提供了計數器的行為。當我們訪問my_instance.counter
時,Python會調用描述符的__get__
方法來提供屬性的值。當我們賦值給my_instance.counter
時,Python會調用描述符的__set__
方法來存儲新的值。當我們刪除my_instance.counter
時,Python會調用描述符的__delete__
方法來刪除屬性。