为什么这个单例概念不会产生无限循环?

时间:2013-11-27 12:20:13

标签: python singleton infinite-loop

我发现这在Python中搜索单例概念。我想知道的是为什么self._instance = super(Singleton, self).__new__(self)不会导致infinte循环。我认为调用__new__会启动一种递归,因为self._instance不应该被设置。

我的错误在哪里?

class Singleton(object):
    _instance = None
    def __new__(self):
        if not self._instance:
            self._instance = super(Singleton, self).__new__(self)
        return self._instance

2 个答案:

答案 0 :(得分:3)

实际上,这会调用object.__new__,而不是Singleton.__new__,因此没有递归。

答案 1 :(得分:2)

super(Singleton, self).__new__(self)

表示:在__new__的超类(Singleton)上调用object

因此它不会再次调用相同的__new__,因此它不会创建无限循环。

返回后,它会将self._instance设置为一个值。下次调用Singleton()时,它将返回该实例。