Итак, класс класса обычно равен type
, и когда вы вызываете Class()
, метод __call__()
класса Class
обрабатывает это.Я считаю, что type.__call__()
реализован более или менее так:
def __call__(cls, *args, **kwargs):
# should do the same thing as type.__call__
obj = cls.__new__(cls, *args, **kwargs)
if isinstance(obj, cls):
obj.__init__(*args, **kwargs)
return obj
Прямой ответ на ваш вопрос - нет, то, что __init__()
может сделать (изменить / "инициализировать" указанный экземпляр),подмножество вещей, которые __new__()
может сделать (создать или иным образом выбрать любой объект, который он хочет, сделать что-либо с этим объектом, который он хочет, прежде чем объект будет возвращен).тем не мение.Использовать __init__()
проще (не нужно ничего создавать, ничего не возвращать), и я считаю, что лучше всегда использовать __init__()
, если у вас нет особых причин использовать __new__()
.