2013-11-27 1 views
1

파이썬에서 싱글 톤 개념을 찾았습니다. 내가 궁금한 점은 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
super(Singleton, self).__new__(self) 

수단 (object이다) Singleton의 슈퍼에 __new__ 전화.

그래서 다시 __new__을 호출하지 않으므로 무한 루프가 생성되지 않습니다.

반환 후 self._instance 값을 설정합니다. 다음 번에 Singleton()이라고하면 대신 해당 인스턴스가 반환됩니다.

3

실제로 이것은 이 아니고 Singleton.__new__이 아니기 때문에 재귀가 없습니다.

+0

'싱글 톤이 아닙니다 .__ 새로운 __()'이 (가)'싱글 톤'의 인스턴스를 반환해야합니까? 그러나 여러분이 언급 한 것처럼'super (Singleton, self) .__ new __ (self)'를 할 때'object'의 인스턴스를 얻습니다. – Adrian

관련 문제