描述符是什麼意思

描述符(Descriptor)在Python中是一個特殊的類,它允許你修改Python對屬性的訪問方式。當你嘗試訪問一個對象的屬性時,Python會檢查這個屬性是否為描述符。如果它是,Python會調用描述符的相關方法來提供屬性的值。

描述符有三個主要方法:

  1. __get__():當屬性被讀取時調用。
  2. __set__():當屬性被賦值時調用。
  3. __delete__():當屬性被刪除時調用。

描述符可以用來實現類似於Python內置類型的行為,例如屬性訪問控制、計數器、觀察者模式等。它們在Python的許多內置類型和標準庫中都有應用,例如propertymethoddata描述符等。

下面是一個簡單的描述符示例:

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是一個描述符,它為MyClasscounter屬性提供了計數器的行為。當我們訪問my_instance.counter時,Python會調用描述符的__get__方法來提供屬性的值。當我們賦值給my_instance.counter時,Python會調用描述符的__set__方法來存儲新的值。當我們刪除my_instance.counter時,Python會調用描述符的__delete__方法來刪除屬性。