python3.3 setter 中的无限递归
infinite recursion in python3.3 setter
谁能告诉我为什么下面的代码中有递归?
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()
我必须从 child class 调用一个基础 class setter。我不允许直接访问该成员。有人可以告诉我其他方法吗?
@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
谁能告诉我为什么下面的代码中有递归?
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()
我必须从 child class 调用一个基础 class setter。我不允许直接访问该成员。有人可以告诉我其他方法吗?
@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