gpt4 book ai didi

OOP 中的 python 属性装饰器

转载 作者:行者123 更新时间:2023-11-30 22:21:58 24 4
gpt4 key购买 nike

我正在测试使用 @property 的想法在面向对象编程中:

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

最佳答案

错误的原因是您试图返回一个与 property 修饰的方法同名的属性。因此,当您调用方法name时,调用会再次触发该方法,因为self.name是在类中声明的方法。这会触发非终止递归。相反,更改属性名称:

class Person(object):
@property
def name(self):
return self._name

@name.setter
def name(self, newname):
self._name = newname

关于OOP 中的 python 属性装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48471882/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com