Форум сайта python.su
Уважаемые FishHook и 4kpt_V, предлагаю вам проявлять уважение друг к другу и к иным участникам форума и не выходить за рамки.
4kpt_V, не мог бы ты аргументировать почему __init__ по твоему мнению не является конструктором. А так же ответить на вопрос в чем принципиальное отличие __init__ в Python от конструкторах в языках C++, C# или Java.
Офлайн
cutwater
Где Вы обнаружили выход “за рамки”. Это раз. Во-вторых. Ну как-бы я Вас давно уже тут не видел. Какими ветрами?
Офлайн
cutwater
Уважаемый cutwater, __init__ не является конструктором в питоне, потому что он не создает объект. Он инициализирует УЖЕ созданный объект. Поэтому он никак не может быть конструктором. А вот метод __new__ создает объект (он его вообще возвращает) поэтому, как мне кажется, это есть конструктор.
Офлайн
cutwaterДа мы просто срёмся
Уважаемые FishHook и 4kpt_V, предлагаю вам проявлять уважение друг к другу и к иным участникам форума и не выходить за рамки.
Офлайн
FishHook
Кто? Побойся бога. Вечерний такой спич…
Офлайн
4kpt_V
cutwaterГде Вы обнаружили выход “за рамки”. Это раз. Во-вторых. Ну как-бы я Вас давно уже тут не видел. Какими ветрами?
Офлайн
cutwater
Спасибо. Учтем. Но как-то вяло было. Мы оживили
Офлайн
FishHook
А вот метод __new__ создает объект (он его вообще возвращает) поэтому, как мне кажется, это есть конструктор.
Отредактировано cutwater (Март 11, 2017 21:42:15)
Офлайн
cutwater
Есть же классическое определение конструктора из ООП. Под это определение __init__ никак не ложиться. А терминология других языков все же и интересна, но все же не является “каноничной”. Поэтом если приводить тот же СИ, то там переменные-члены, если я не ошибаюсь. По ООП это все же атрибуты, т.е. терминология СИ ну никак не может быть использована как основа для сравнения.
Офлайн
Конструкторы в питоне - это list(), dict() и так далее. А __init__() можно вызывать много раз, но он не создаёт объект ни разу. Создание объекта - это выделение памяти и назначение ссылки, через которую можно обращаться к объекту.
Офлайн