2013-11-27 87 views
1

我发现这在Python中寻找单例概念。我想知道的是为什么self._instance = super(Singleton, self).__new__(self)不会导致无限循环。我认为调用__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
super(Singleton, self).__new__(self) 

装置:调用__new__上的Singleton超类(这是object)。

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

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

3

实际上,它调用object.__new__而不是Singleton.__new__,所以没有递归。

+0

不是'Singleton .__ new __()'应该返回一个'Singleton'的实例吗?但正如你所提到的,当你做'super(Singleton,self)时,你会得到一个'object'的实例.__ new __(self)'' – Adrian