Python:@property decorator在初始化时无限循环?

2024-06-12 00:59:21 发布

您现在位置:Python中文网/ 问答频道 /正文

Python版本是3.6.5.。我正在学习如何正确地使用@decorator语法糖作为我的class Duck。但似乎我做错了什么,我的qq_duck死于过热。下面是演示:

class Duck(object):
    def __init__(self, name):
        self.name = name

    @property
    def name(self):
        print("Quack! My name is", self.name)

    @name.setter
    def name(self, name):
        print("I've decided to change my name into", name, ".")
        print("So please call me", name, "from now on! Quack!")
        self.name = name

终端:

^{pr2}$

请帮忙。。。在


Tags: nameself版本objectinitdef语法decorator
2条回答

你的什么自身名称正在调用您刚刚定义的属性。但这就是它最初所说的,所以它会无限循环。在

该代码可以表示为:

self.name = "something" + ("something" + ("something" + ...[on to infinity!]...) )

{assign>当你调用cdsetter函数时。这确实会导致无限递归。在

解决方法可能是:

class Duck(object):
    def __init__(self, name):
        self._name = name

@property
def name(self):
    print("Quack! My name is", self._name)
    # here you usually return the data member...
    return self._name

@name.setter
def name(self, name):
    print("I've decided to change my name into", name, ".")
    print("So please call me", name, "from now on! Quack!")
    self._name = name

请注意成员self._name与属性self.name有何不同。在

相关问题 更多 >