class Cls():
def __init__(self, start):
self.value = start
class Desc():
def __get__(self, instance ,owner):
print("In Descriptor's __get__method")
return self.value
def __set__(self, instance, start):
print("In Descriptor's __set__ method")
self.value = start
value = Desc()
X = Cls('Hello')
X.value = "Hi"
描述符的上述實現對我來說是模糊的。 X.value和Cls.value引用同一個對象,並且是str類。但Cls .__ dict __ ['value']是描述符對象。有兩種類型分配給名稱「值」。Python描述符的特定實現
有人可以解釋這一點嗎?這個特定實現的邏輯是什麼?爲什麼Cls.value或X.value不是描述符對象。我正在使用python 3.3
您瞭解描述符協議的工作原理嗎?因爲你所描述的聽起來像它的設計工作。描述符協議在執行'obj.value'時被激活。當您執行'obj .__ dict __ ['value']'時,它不會被激活。 – BrenBarn
這意味着有'值'是指在Cls命名空間中的字符串對象「hello」。然後還有另一個'值'指向Cls命名空間中的描述符對象 – user634615
您有誤解。 '__set__' /'__get__'方法中的'self'引用描述符對象本身,而不是'Cls'實例。看到我編輯的答案。 – BrenBarn