OOP中的python属性装饰器

jxie0755

我正在测试@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.nameself._name,似乎可以解决问题。所以我想我不能设置一段self.name时间name()作为@property

阿贾克斯1234

出现此错误的原因是,您尝试返回的属性名称与要修饰的方法名称完全相同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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章