我花了一些时间来学习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:那里,更好? –