我正在测试@property
在OOP中使用的想法:
class Person(object):
@property
def name(self):
return self.name
@name.setter
def name(self, newname):
self.name = newname
james = Person()
james.name = 'James Bond'
print(james.name)
>>> RecursionError: maximum recursion depth exceeded
不知何故,这给了我递归错误?
但如果更改self.name
为self._name
,似乎可以解决问题。所以我想我不能设置一段self.name
时间name()
作为@property
?
出现此错误的原因是,您尝试返回的属性名称与要修饰的方法名称完全相同property
。因此,当您调用方法时name
,调用会再次触发该方法,因为self.name
是在类中声明的方法。这触发了非终止递归。而是,更改属性名称:
class Person(object):
@property
def name(self):
return self._name
@name.setter
def name(self, newname):
self._name = newname
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句