Форум сайта python.su
Djo0513
Ваш ответ тут не при чем. Просто это такая слегка холиварная тема. Например, если Вы спросите что лучше джанга или фласк, то срач будет не меньше
Офлайн
Ого! Вот это я пропустил срачик!
Слушайте, а если принять, что __init__, это конструктор, то что же такое __new__? Конструктор конструктора? О! Знаю! Создатель! Он же Бог. Как-то мне не по себе от таких материй в программировании…
Офлайн
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();
}
Офлайн
Shaman, как ни странно, питон принёс кое что новое… Просто не в этом месте. :-)
Но всё же, мне кажется, что в разговорной речи, для __init__ правильно использовать “инициализатор”, а для __new__ — “конструктор”. Но я знаю, что на сей счёт существует больше одного мнения.
Офлайн
Для меня, кстати, в своё время было открытием, что __init__ не из __new__ вызывается. Кто-нить знает, почему так сделали?
Офлайн
Я же кинул ссылку, там понятно написано, что __new__ - это распределитель, а __init__ - инициализатор, а вместе они составляют конструктор <ClassName>(). __new__ создает экземпляр и передает его в __init__ тот его инициализирует. Спор напоминает тот, в котором ученые обсуждали является ли свет потоком частиц или волной.
Офлайн
wi34rd, если я в разговоре скажу, что “надо использовать распределитель” (или даже “аллокатор”), то меня, думаю, не поймут. А вот “конструктор” понимают все.
Офлайн
Задачей конструктора издревле была инициализация объектов.
Проще всего считать использование термина “конструктор” в рамках языка Python особым случаем. Я так и делаю )
Офлайн
ZZZ
Но всё же, мне кажется, что в разговорной речи, для __init__ правильно использовать “инициализатор”, а для __new__ — “конструктор”. Но я знаю, что на сей счёт существует больше одного мнения.
Shaman
Задачей конструктора издревле была инициализация объектов.
Офлайн
ZZZ, в зависимости от контекста я или подумаю на <имя класса>(), или на __init__(), но никак не на __new__().
Отредактировано wi34rd (Март 13, 2017 11:59:33)
Офлайн