18
__init __()が常に__new __()の後に呼び出されるのはなぜですか?
私はクラスの1つを合理化しようとしているだけで、フライウェイトデザインパターンと同じスタイルでいくつかの機能を導入しています。 ただし、__init__が常に後に呼び出される理由については、少し混乱してい__new__ます。私はこれを期待していませんでした。なぜこれが起こっているのか、そしてこの機能を別の方法で実装するにはどうすればよいですか?(実装をに入れるのは別として、__new__かなりハックに感じます。) 次に例を示します。 class A(object): _dict = dict() def __new__(cls): if 'key' in A._dict: print "EXISTS" return A._dict['key'] else: print "NEW" return super(A, cls).__new__(cls) def __init__(self): print "INIT" A._dict['key'] = self print "" a1 = A() a2 = A() a3 = A() 出力: NEW INIT EXISTS INIT EXISTS INIT どうして?