LINUX.ORG.RU

История изменений

Исправление Virtuos86, (текущая версия) :

Ну и мешанина. Тащемта конструктор и должен создавать инстанс.

Выделением памяти под обьект занимается не конструктор.

В Python, как в интерпретируемом ЯП с виртуальной машиной, память выделяет она. А «конструктором» класса в питоне, повторяюсь, будет метод __new__. Конструктор по определению, как минимум, должен возвращать инстанс класса. __new__ этому условию удовлетворяет, __init__ нет.

Конструктор получает уже готовую память. Т.е обьект, но в неизвестном состоянии. Его задача - привести обьект в корректное начальное состояние.

В питоне говорить про память… Ну-ну… Если у вас после __new__ объект пребывает в неизвестном состоянии, то вы очень оригинально проектируете свои типы данных. Назначение метода __init__ — манки-патчинг готового инстанса базового класса, чтобы не заниматься патчингом конструктора, поскольку таковой уровень ковыряния в кишках класса обычно без надобности.

Исходная версия Virtuos86, :

Ну и мешанина. Тащемта конструктор и должен создавать инстанс.

Выделением памяти под обьект занимается не конструктор.

В Python, как в интерпретируемом ЯП с виртуальной машиной, память выделяет она. И «конструктором» класса в питоне, повторюсь будет метод __new__. Конструктор по определению, как минимум, должен возвращать инстанс класса. __new__ этому условию удовлетворяет, __init__ нет.

Конструктор получает уже готовую память. Т.е обьект, но в неизвестном состоянии. Его задача - привести обьект в корректное начальное состояние.

В питоне говорить про память… Ну-ну… Если у вас после __new__ объект пребывает в неизвестном состоянии, то вы очень оригинально проектируете свои типы данных. Назначение метода __init__ — манки-патчинг готового инстанса базового класса, чтобы не заниматься патчингом конструктора, поскольку таковой уровень ковыряния в кишках класса обычно без надобности.