그래서 저는 메모 된 수업을 만들고 이상한 행동을 관찰하고 있습니다.Memoized 객체는 여전히 __init __()가 호출 되었습니까?
class SomeClass(object):
_Memoized = {}
def __new__(cls, id: str, *args, **kwargs):
if id not in cls._Memoized:
print('New Instance')
cls._Memoized[id] = super(SomeClass, cls).__new__(cls, *args, **kwargs)
else:
print('Existing Instance')
return cls._Memoized[id]
def __init__(self, id: str):
print('Running init')
self.id = id
def test():
w1 = SomeClass(id='w1')
wx = SomeClass(id='w1')
print(id(w1), id(wx), id(w1) == id(wx))
test()
에 위의 코드 결과를 실행 :
New Instance
Running init
Existing Instance
Running init <===-------------------???
140008534476784 140008534476784 True
내 질문 : SomeClass()
의 두 번째 호출 동안, 왜이 __init__
생성자를 실행 않습니다
여기에 코드의 조각을입니까? __init__
인스턴스 생성시에만 생성자가 호출되지 않았습니까? __init__
이 호출되지 않도록 할 수있는 방법이 있습니까?
'__new__'을 정의하면 일반적으로'__new__'에서 모든 초기화 작업을 수행합니다. '__init__'를 전혀 정의하지 마십시오. – ShadowRanger