июля 7, 2010Python: в чем разница между __new__ и __init__ ?
Продолжаю отвечать на вопросы, которые могут задать на собеседовании Python-разработчику.
Итак, в чем разница между __new__ и __init__ ? Разберемся с этим на примере кода:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 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
Мы видим, что __init__ вызывается после __new__, т.к. __new__ — классовый метод, переопределив который можно контролировать процесс создания нового экземпляра класса, именно его (экземпляр) либо None и возвращает __new__. __init__ же ничего не возвращает, он только отвечает за инициализацию созданного экземпляра.



Leave a Reply