Я просто пытаюсь упорядочить один из моих классов и ввел некоторые функции в том же стиле, что и шаблон дизайна мухи.
Однако я немного смущен, почему __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
Почему?