【问题标题】:infinite recursion in python3.3 setterpython.3座位中的无限递归
【发布时间】:2015-06-14 21:02:10
【问题描述】:

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

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()

我必须从子类调用基类设置器。我不允许直接访问该成员。有人可以告诉我如何做其他方式吗?

【问题讨论】:

    标签: python python-3.x properties


    【解决方案1】:
    @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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-23
      • 1970-01-01
      • 1970-01-01
      • 2014-09-13
      • 2011-08-16
      • 1970-01-01
      相关资源
      最近更新 更多