我的代碼的setter/getter方法:Python是怎樣知道打電話與性能
class MyClass:
def __init__(self):
self.value = 0
def set_value(self, value):
self.value = 5
def get_value(self):
return self.value
value = property(get_value, set_value)
a = MyClass()
我得到以下輸出:
RecursionError: maximum recursion depth exceeded
我的問題:爲什麼我得到這個輸出?爲什麼Python調用MyClass.value .__ set__而不是將實例變量設置爲0?
我的意思是屬性對象是一個類變量,當初始化a
-instance我不會對類變量做任何事情。希望你明白我的意思。
有趣的輸出,我不會期待這一點。只是想補充一點,將'value'變成一個私有變量(替換爲__value)可以解決這個問題。 – Michael
@邁克爾,並沒有把它變成私人的,它只是名字而已。只要屬性後面的屬性具有不同的名稱(傳統上帶有*單個*前導下劃線,但可能完全不同),則不會有遞歸。 – jonrsharpe
它調用'MyClass.value .__ set__',因爲*屬性的工作方式*。否則,只要您分配給該屬性,就立即使用值替換該屬性。 – jonrsharpe