Найти - Пользователи
Полная версия: Зачем писать self.name = name, а после использовать self.name вместо name?
Начало » Python для новичков » Зачем писать self.name = name, а после использовать self.name вместо name?
1 2 3 4 5 6 7 8 9 10
4kpt_V
cutwater
Это достаточно обширная тема, зависит от конкретной реализации и надеюсь нам не придется в нее углубляться. Надеюсь для вас не будет открытием, что есть функции, которые значение не возвращают.

Ага. Процедуры. В паскале и делфи они даже определяются по-разному. Вы на мой вопрос так и не ответили.
FishHook
cutwater
Еще раз, в момет вызова конструктора участок в памяти для объекта уже выделен
Ну да, только его значение не определено
cutwater
Было бы неплохо увидеть ссылку на источник подтверждающий Ваши слова.
Давайте рассуждать. Если функция создания нового объекта возвращает НЕ сслыку на объект и не null, то что она возрзвращает?
cutwater
4kpt_V
Не ложиться. Я написал почему. Потому, что __init__ выполняется после создания экземпляра, а конструктор должен выполнятся при создании, т.е. в процессе создания.

Это походит на демагогию.

Дело в том, что в различных языках существует процедура инстанцирования объекта, которая включает в себя как выделение памяти для объекта, инициализацию объекта и возврат ссылки на объект. В популярных на сегодняшний день языках конструктор отвечает за инициализацию объекта. При этом он вызывается не явно как часть процесса инстанцирования объекта.

В Python инстанцирование объекта включает в себя неявный вызов метода __init__, который обычно используется для инициализации объекта, на который ссылается первый параметр self. Так же __init__ не возвращает значение. Подобное поведение наблюдается и в других языках программирования.

Быть может следует для начала дать определение “созданного объекта”?
cutwater
FishHook
Давайте рассуждать. Если функция создания нового объекта возвращает НЕ сслыку на объект и не null, то что она возрзвращает?

Кто вам сказал, что это функция создания нового объекта? Вы не допускаете, что память под объект может быть выделена еще до вызова этой функции (напр. оператором new или malloc или любым другим способом) и ссылка \ указатель может быть передан функции явно (напр. первым параметром) или неявно (в зависимости от реализации).

Если хотите узнать более подробно, стоит посмотреть на сгенерированный ассемблерный код или код для JVM или MSIL. Но мне сейчас немного лень этим заниматься, будет время расскажу подробнее.
4kpt_V
cutwater
Дело в том, что в различных языках существует процедура инстанцирования объекта, которая включает в себя как выделение памяти для объекта, инициализацию объекта и возврат ссылки на объект. В популярных на сегодняшний день языках конструктор отвечает за инициализацию объекта. При этом он вызывается не явно как часть процесса инстанцирования объекта.

В Python инстанцирование объекта включает в себя неявный вызов метода __init__, который обычно используется для инициализации объекта, на который ссылается первый параметр self. Так же __init__ не возвращает значение. Подобное поведение наблюдается и в других языках программирования.

Быть может следует для начала дать определение “созданного объекта”?

Да все это похоже на демагогию. Как-то так. Возможно объект нельзя считать созданным, пока нет обращения к хотя-бы к одном атрибуту или методу. Вы сами выложили определение и от него отказались.
wi34rd
del
cutwater
wi34rd
Из вики.

Вики увы не самый надежный источник информации. Более того английская и русская вики в мнениях расходтся.

4kpt_V
Да все это похоже на демагогию. Как-то так. Возможно объект нельзя считать созданным, пока нет обращения к хотя-бы к одном атрибуту или методу. Вы сами выложили определение и от него отказались.

Я не отказываюсь от своего определения, скорее мы с Вами его трактуем по разному.


P.S. У меня сейчас нет возможности писать развернутые ответы, отпишусь в понедельник более обстоятельно.
Shaman
FishHook
Это ссылка на null, ничто не нарушает моего определения
Да неужто? А как работает placement new C++?
character = reinterpret_cast<Character*>(alives.allocate());
new (character) Character();
Djo0513
Как много внимания уделено моему ответу.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB