我正在使用property()
设置班级的getters
和setters
这是代码:
class Person:
def __init__(self, email=None):
self.email = email
def set_email(self, value):
self._email = value
def get_email(self):
return self._email
email = property(get_email, set_email)
if __name__ == "__main__":
try:
contact = Person(email="abc@123")
except Exception as e:
print(e)
此代码工作完美,但是当我在self._email
中将self.email
更改为set_email()
时:
def set_email(self, value):
self.email = value
我正在:
self.email =值[上一行重复494次]RecursionError:超出最大递归深度
我知道变量前有一个下划线表示该变量仅供内部使用。但是,即使在构造函数中使用了self._email
,我也无法理解为什么需要使用self.email
。
谁能解释为什么会这样吗?
分配self.email
将首先检查email
是否是数据描述符,如果是,它将调用相应的setter函数,在您的情况下为set_email
。因此,当您执行self.email = ...
时,会有效地调用set_email(self, ...)
。在__init__
内这不是问题,但是在set_email
内显然会导致无限递归。