Комментарии 2
Обратите внимание, что __init__
будет вызываться каждый раз при вызове Singleton(), поэтому следует соблюдать осторожность.
Именно поэтому надо переопределять не __new__
, а __call__
у метакласса.
+3
В некоторых случаях __new__ необходим — например, если вы пытаетесь дополнить наследованием стандартный namedtuple() или, скажем, numpy.ndarray. Т.е. если класс уже использует __new__, то деваться некуда. Несколько более экзотический сценарий — численный тип с ограничением на допустимый диапазон. Но там одним __new__ не обойдешься.
Также __new__ полезен, если вам может потребоваться вернуть что-то, отличное от нового экземпляра заданного класса. Если это не так, то можно обойтись и без.
Также __new__ полезен, если вам может потребоваться вернуть что-то, отличное от нового экземпляра заданного класса. Если это не так, то можно обойтись и без.
+3
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Инстанцирование в Python