Уведомления

Группа в Telegram: @pythonsu

#1 Март 11, 2017 21:23:37

cutwater
От:
Зарегистрирован: 2009-01-08
Сообщения: 444
Репутация: +  19  -
Профиль   Отправить e-mail  

Зачем писать self.name = name, а после использовать self.name вместо name?

Уважаемые FishHook и 4kpt_V, предлагаю вам проявлять уважение друг к другу и к иным участникам форума и не выходить за рамки.

4kpt_V, не мог бы ты аргументировать почему __init__ по твоему мнению не является конструктором. А так же ответить на вопрос в чем принципиальное отличие __init__ в Python от конструкторах в языках C++, C# или Java.



Офлайн

#2 Март 11, 2017 21:25:54

4kpt_V
От: Харьков
Зарегистрирован: 2017-02-19
Сообщения: 299
Репутация: +  12  -
Профиль   Отправить e-mail  

Зачем писать self.name = name, а после использовать self.name вместо name?

cutwater
Где Вы обнаружили выход “за рамки”. Это раз. Во-вторых. Ну как-бы я Вас давно уже тут не видел. Какими ветрами?

Офлайн

#3 Март 11, 2017 21:27:57

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Зачем писать self.name = name, а после использовать self.name вместо name?

cutwater
Уважаемый cutwater, __init__ не является конструктором в питоне, потому что он не создает объект. Он инициализирует УЖЕ созданный объект. Поэтому он никак не может быть конструктором. А вот метод __new__ создает объект (он его вообще возвращает) поэтому, как мне кажется, это есть конструктор.



Офлайн

#4 Март 11, 2017 21:29:04

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Зачем писать self.name = name, а после использовать self.name вместо name?

cutwater
Уважаемые FishHook и 4kpt_V, предлагаю вам проявлять уважение друг к другу и к иным участникам форума и не выходить за рамки.
Да мы просто срёмся



Офлайн

#5 Март 11, 2017 21:29:39

4kpt_V
От: Харьков
Зарегистрирован: 2017-02-19
Сообщения: 299
Репутация: +  12  -
Профиль   Отправить e-mail  

Зачем писать self.name = name, а после использовать self.name вместо name?

FishHook
Кто? Побойся бога. Вечерний такой спич…

Офлайн

#6 Март 11, 2017 21:31:01

cutwater
От:
Зарегистрирован: 2009-01-08
Сообщения: 444
Репутация: +  19  -
Профиль   Отправить e-mail  

Зачем писать self.name = name, а после использовать self.name вместо name?

4kpt_V
cutwaterГде Вы обнаружили выход “за рамки”. Это раз. Во-вторых. Ну как-бы я Вас давно уже тут не видел. Какими ветрами?

Периодически почитываю форум, но к сожалению пишу сюда крайне редко. Более сдержанная в эмоциях дискуссия была бы предпочтительней в рамках обсуждения за рамками раздела “Флейм”, но это лишь мое личное мнение.



Офлайн

#7 Март 11, 2017 21:33:02

4kpt_V
От: Харьков
Зарегистрирован: 2017-02-19
Сообщения: 299
Репутация: +  12  -
Профиль   Отправить e-mail  

Зачем писать self.name = name, а после использовать self.name вместо name?

cutwater
Спасибо. Учтем. Но как-то вяло было. Мы оживили

Офлайн

#8 Март 11, 2017 21:38:06

cutwater
От:
Зарегистрирован: 2009-01-08
Сообщения: 444
Репутация: +  19  -
Профиль   Отправить e-mail  

Зачем писать self.name = name, а после использовать self.name вместо name?

FishHook
А вот метод __new__ создает объект (он его вообще возвращает) поэтому, как мне кажется, это есть конструктор.

Не могу согласиться с этим утверждением.

Проводя параллель между языком Python и такими популярными языками как Java, C#, C++, возникает закономерный вопрос. В этих языках конструкторы есть, но значение они не возвращают.

Было бы неплохо для начала дать определение созданию объекта. Поскольку если к примеру говорить о С++, то объект класса создается при помощи оператора new, который выделяет память для объекта и вызывает конструктор класса (т.е. выполняет инициализацию объекта). При чем память может быть выделена любым другим механизмом, а объект может быть инициализирован оператором placement new, который по факту вызывает конструктор класса над уже аллоцированным участком памяти.

Соответственно как мне кажется наиболее подходящим под задачи конструктора является __init__, хотя никто не запрещает инициализировать объект в методе __new__.



Отредактировано cutwater (Март 11, 2017 21:42:15)

Офлайн

#9 Март 11, 2017 21:43:18

4kpt_V
От: Харьков
Зарегистрирован: 2017-02-19
Сообщения: 299
Репутация: +  12  -
Профиль   Отправить e-mail  

Зачем писать self.name = name, а после использовать self.name вместо name?

cutwater
Есть же классическое определение конструктора из ООП. Под это определение __init__ никак не ложиться. А терминология других языков все же и интересна, но все же не является “каноничной”. Поэтом если приводить тот же СИ, то там переменные-члены, если я не ошибаюсь. По ООП это все же атрибуты, т.е. терминология СИ ну никак не может быть использована как основа для сравнения.

Офлайн

#10 Март 11, 2017 21:43:19

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9885
Репутация: +  853  -
Профиль   Отправить e-mail  

Зачем писать self.name = name, а после использовать self.name вместо name?

Конструкторы в питоне - это list(), dict() и так далее. А __init__() можно вызывать много раз, но он не создаёт объект ни разу. Создание объекта - это выделение памяти и назначение ссылки, через которую можно обращаться к объекту.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version