私有变量和python中的属性

  • 本文关键字:属性 python 变量 python
  • 更新时间 :
  • 英文 :


我正在摆弄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方法中Age为self。在getter和deleter方法中做同样的事情,一切都很好,但我不太明白为什么。我看了文档,但我真的不明白:"名称混淆有助于让子类重写方法而不会破坏类内方法调用。"当我得到递归错误时,我估计有什么东西坏了,但对我来说似乎没有。按照我的推理:

  1. 我定义了要存储在字典中的属性
  2. 我使用self.attribute_name修改该属性我的意思是,似乎有些东西已经运行时,我试图修改使用我的方法的属性名称。有人能把私有变量的概念和属性描述符联系起来吗,因为这可能就是问题所在。谢谢您的关注。

self.age是具有设置逻辑set_age的描述符。执行self.age = ...时,调用set_age

由于对self.age的赋值发生在set_age中,因此得到无限递归。

您可以这样做以避免名称冲突。

class Employer:
def __init__(self, age, name):
self.__age = age
self.__name = name

@property
def age(self):
return self.__age
@age.setter
def age(self, value):
if value > 30:
raise ValueError("Our company doesn't want old people")
self.__age = value
@age.deleter
def age(self):
del self.__age

最新更新