Форум сайта python.su
cutwater
Это достаточно обширная тема, зависит от конкретной реализации и надеюсь нам не придется в нее углубляться. Надеюсь для вас не будет открытием, что есть функции, которые значение не возвращают.
Отредактировано 4kpt_V (Март 11, 2017 22:58:40)
Офлайн
cutwaterНу да, только его значение не определено
Еще раз, в момет вызова конструктора участок в памяти для объекта уже выделен
cutwaterДавайте рассуждать. Если функция создания нового объекта возвращает НЕ сслыку на объект и не null, то что она возрзвращает?
Было бы неплохо увидеть ссылку на источник подтверждающий Ваши слова.
Офлайн
4kpt_V
Не ложиться. Я написал почему. Потому, что __init__ выполняется после создания экземпляра, а конструктор должен выполнятся при создании, т.е. в процессе создания.
Офлайн
FishHook
Давайте рассуждать. Если функция создания нового объекта возвращает НЕ сслыку на объект и не null, то что она возрзвращает?
Офлайн
cutwater
Дело в том, что в различных языках существует процедура инстанцирования объекта, которая включает в себя как выделение памяти для объекта, инициализацию объекта и возврат ссылки на объект. В популярных на сегодняшний день языках конструктор отвечает за инициализацию объекта. При этом он вызывается не явно как часть процесса инстанцирования объекта.
В Python инстанцирование объекта включает в себя неявный вызов метода __init__, который обычно используется для инициализации объекта, на который ссылается первый параметр self. Так же __init__ не возвращает значение. Подобное поведение наблюдается и в других языках программирования.
Быть может следует для начала дать определение “созданного объекта”?
Офлайн
del
Отредактировано wi34rd (Март 12, 2017 08:36:50)
Офлайн
wi34rd
Из вики.
4kpt_V
Да все это похоже на демагогию. Как-то так. Возможно объект нельзя считать созданным, пока нет обращения к хотя-бы к одном атрибуту или методу. Вы сами выложили определение и от него отказались.
Офлайн
Офлайн
FishHookДа неужто? А как работает placement new C++?
Это ссылка на null, ничто не нарушает моего определения
character = reinterpret_cast<Character*>(alives.allocate());
new (character) Character();
Отредактировано Shaman (Март 12, 2017 10:46:31)
Офлайн
Как много внимания уделено моему ответу.
Офлайн