2013-11-27 86 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