【发布时间】:2021-11-22 03:53:34
【问题描述】:
我在 python 中弄乱了属性描述符,但是弹出了一个有趣的错误(至少对我来说)(recursionerror)。这是导致它的代码
class Employer:
def __init__(self, age, name):
self.age = age
self.name = name
def get_age(self):
return self.age
def set_age(self, value):
if value > 30:
raise ValueError("Our company doesn't want old people")
self.age = value
def deleter(self):
del self.age
age = property(get_age, set_age, deleter)
emp = Employer(20, "Alex")
现在,在我将 setter 方法中的 self.age 更改为 self._age 并在 getter 和 deleter 方法中做了同样的事情之后,一切正常,但我真的不明白为什么。我查看了文档,但是我真的不明白这一点: “名称修饰有助于让子类覆盖方法而不破坏类内方法调用。”当我得到递归错误时,我认为某些东西被破坏了,但在我看来并没有。按照我的推理:
- 我定义了要存储在字典中的属性
- 我使用 self.attribute_name 修改该属性 我的意思是,当我尝试使用我的方法修改属性名称时,似乎某些东西已经在运行。有人可以将私有变量的概念与属性描述符联系起来,因为可能这就是问题所在。谢谢您的关注。李>
【问题讨论】:
标签: python