Как стать автором
Обновить

Комментарии 2

Обратите внимание, что __init__ будет вызываться каждый раз при вызове Singleton(), поэтому следует соблюдать осторожность.

Именно поэтому надо переопределять не __new__, а __call__ у метакласса.

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

Публикации

Истории