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 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。
    @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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看