Уведомления

Группа в Telegram: @pythonsu

#1 Март 12, 2017 22:53:49

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

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

Djo0513
Ваш ответ тут не при чем. Просто это такая слегка холиварная тема. Например, если Вы спросите что лучше джанга или фласк, то срач будет не меньше

Офлайн

#2 Март 12, 2017 23:59:25

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

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

Ого! Вот это я пропустил срачик!
Слушайте, а если принять, что __init__, это конструктор, то что же такое __new__? Конструктор конструктора? О! Знаю! Создатель! Он же Бог. Как-то мне не по себе от таких материй в программировании…



Офлайн

#3 Март 13, 2017 00:07:41

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

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

ZZZ
если принять, что __init__, это конструктор, то что же такое __new__?
Не так важно как оно называется, а важно, что Питон не привнёс тут ничего нового.
#include <cstddef>

class Test
{
int member;
public:
Test()
{
member = 1;
}

void* operator new(size_t size)
{
return nullptr;
}
};

int main()
{
auto var = new Test();
}

Офлайн

#4 Март 13, 2017 00:10:46

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

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

Shaman, как ни странно, питон принёс кое что новое… Просто не в этом месте. :-)
Но всё же, мне кажется, что в разговорной речи, для __init__ правильно использовать “инициализатор”, а для __new__ — “конструктор”. Но я знаю, что на сей счёт существует больше одного мнения.



Офлайн

#5 Март 13, 2017 00:12:10

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

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

Для меня, кстати, в своё время было открытием, что __init__ не из __new__ вызывается. Кто-нить знает, почему так сделали?



Офлайн

#6 Март 13, 2017 01:18:42

wi34rd
Зарегистрирован: 2016-10-08
Сообщения: 89
Репутация: +  2  -
Профиль   Отправить e-mail  

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

Я же кинул ссылку, там понятно написано, что __new__ - это распределитель, а __init__ - инициализатор, а вместе они составляют конструктор <ClassName>(). __new__ создает экземпляр и передает его в __init__ тот его инициализирует. Спор напоминает тот, в котором ученые обсуждали является ли свет потоком частиц или волной.

Офлайн

#7 Март 13, 2017 09:33:01

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

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

wi34rd, если я в разговоре скажу, что “надо использовать распределитель” (или даже “аллокатор”), то меня, думаю, не поймут. А вот “конструктор” понимают все.



Офлайн

#8 Март 13, 2017 09:38:31

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

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

Задачей конструктора издревле была инициализация объектов.
Проще всего считать использование термина “конструктор” в рамках языка Python особым случаем. Я так и делаю )

Офлайн

#9 Март 13, 2017 11:29:27

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

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

ZZZ
Но всё же, мне кажется, что в разговорной речи, для __init__ правильно использовать “инициализатор”, а для __new__ — “конструктор”. Но я знаю, что на сей счёт существует больше одного мнения.

Почему это правильно? Ведь

Shaman
Задачей конструктора издревле была инициализация объектов.



Офлайн

#10 Март 13, 2017 11:59:02

wi34rd
Зарегистрирован: 2016-10-08
Сообщения: 89
Репутация: +  2  -
Профиль   Отправить e-mail  

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

ZZZ, в зависимости от контекста я или подумаю на <имя класса>(), или на __init__(), но никак не на __new__().

Отредактировано wi34rd (Март 13, 2017 11:59:33)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version