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