我花了一些時間來學習Python的屬性魔法。但是,當我寫一個簡單的案例時會出現一個小錯誤,我會得到一個奇怪的結果。這裏是我的代碼:使用python屬性的奇怪結果
class PropertyShow(object):
def __init__(self):
self.__num = 90
def setNum(self,value):
self.__num = value
def getNum(self):
return self.__num
def delNum(self):
del self.__num
#num = property(getNum,setNum,delNum)
# I made a mistake here!
__num = property(getNum,setNum,delNum)
class PropertyTwo(object):
def __init__(self):
self.__num = None
@property
def num(self):
"""OK, use a decorator, you can do something here!"""
return self.__num
@num.setter
def num(self,value):
self.__num = value
@num.deleter
def num(self):
del self.__num
one = PropertyShow()
print one.num
two = PropertyTwo()
print two.num
在重點線, 「NUM =屬性(getNum,setNum,delNum)」。我改變了這種粗心,現在就像這樣「__num = property(getNum,setNum,delNum)」。
這段代碼的結果是:
File "property.py", line 6, in setNum
self.__num = value
RuntimeError: maximum recursion depth exceeded
- 更換
num
到__num
時,爲什麼我得到這個意外的結果? - 如何理解的
property()
魔術和爲什麼要使用私有變量?*
那麼當屬性設置器試圖再次設置「self .__ num'時會發生什麼? –
@JonClements:那裏,更好? –