Skip to main content
 首页 » 编程设计

python之python.3 seater 中的无限递归

2025年05月04日15wayfarer

有人能告诉我为什么下面的代码中有递归吗?

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 。我不允许直接访问该成员。有人可以告诉我如何做其他方式吗?

请您参考如下方法:

@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