簡體   English   中英

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

我必須從子類調用基類設置器。 我不能直接訪問會員。 有人能告訴我怎么做嗎?

@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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM