有人可以告诉我为什么在下面的代码中有一个递归?
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()
我必须从子类调用基类setter。我不被允许直接访问该成员。有人可以告诉我怎么做其他方式吗?
答案 0 :(得分:6)
@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