python3.3 setter中的无限递归
发布于 2021-01-29 16:51:09
有人可以告诉我为什么下面的代码有递归吗?
class A:
def __init__(self):
self.a = 0
@property
def a(self):
print ("called a getter")
return self.a
@a.setter
def a(self, value):
print ("called a setter")
self.a = value
class B(A):
def check(self):
a = 10
if __name__ == "__main__":
bb = B()
bb.check()
我必须从子类中调用基类设置器。我不允许直接访问该成员。有人可以告诉我怎么做吗?
关注者
0
被浏览
49
1 个回答
-
@a.setter def a(self, value): print ("called a setter") self.a = value
当
self.a = value
执行时,它调用你的方法a(self, value)
再次,它执行self.a = value
再次,它调用a(self, value)
…等常规解决方案是为属性和基础属性使用不同的名称。例如 您可以在前面添加下划线。
class A: def __init__(self): self._a = 0 @property def a(self): print ("called a getter") return self._a @a.setter def a(self, value): print ("called a setter") self._a = value