최근에 나는 an interesting discussion on how to make a singleton in Python을 읽었습니다. 솔루션의 하나는 tricky decorator defining a class inside its code as a substitute for decorated class이었다왜 여기에서 재귀가 발생합니까?
def singleton(class_):
class class_w(class_):
_instance = None
def __new__(class2, *args, **kwargs):
if class_w._instance is None:
class_w._instance = super(class_w, class2).__new__(class2, *args, **kwargs)
class_w._instance._sealed = False
return class_w._instance
def __init__(self, *args, **kwargs):
if self._sealed:
return
super(class_w, self).__init__(*args, **kwargs)
self._sealed = True
class_w.__name__ = class_.__name__
return class_w
@singleton
class MyClass(object):
def __init__(self, text):
print text
@classmethod
def name(class_):
print class_.__name__
x = MyClass(111)
x.name()
y = MyClass(222)
print id(x) == id(y)
출력은 다음과 같습니다
111 # the __init__ is called only on the 1st time
MyClass # the __name__ is preserved
True # this is actually the same instance
그것은 언급, 우리는 MyClass
의 __init__
내부 super(MyClass, self).__init__(text)
를 사용하는 경우, 우리는 재귀로 얻을.
테스트를 거쳤으며 실제로 재귀가 발생합니다. 하지만, 내가 이해, MyClass
그래서 super(MyClass, self)
그냥 단순히 object
해야한다, object
상속하지만 super(MyClass, self)
이 __main__.MyClass
당신이 재귀 일이 왜 나에게 이유를 이해하는 단계에 의해 여기 단계를 상황에 대해 설명 할 수 있음을 밝혀 ?
Super()는 python에서 약간 까다 롭습니다. http://rhettinger.wordpress.com/2011/05/26/super-considered-super/ – Lycha