Найти - Пользователи
Полная версия: Зачем писать 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
py.user.next
Конструкторы в питоне - это list(), dict()
В литературе их чаще всего называют фабриками базовых типов, если я не ошибаюсь. Могу точно глянуть.
cutwater
py.user.next, приведите пожалуйста ссылку на источник, который утверждает, что конструктор должен создавать объект.

В объектно-ориентированном программировании конструктор класса (от англ. constructor) — специальный блок инструкций, вызываемый при создании объекта.
Wikipedia

A constructor is a kind of member function that initializes an instance of its class. A constructor has the same name as the class and no return value.
MSDN
4kpt_V
Метод __init__ вызывается сразу после создания экземпляра класса.
py.user.next
cutwater
риведите пожалуйста ссылку на источник, который утверждает, что конструктор должен создавать объект

https://docs.python.org/3/library/stdtypes.html#list
The constructor builds a list whose items are the same and in the same order as iterable‘s items.

https://en.wikipedia.org/wiki/Constructor_%28object-oriented_programming%29
In class-based object-oriented programming, a constructor (abbreviation: ctor) in a class is a special type of subroutine called to create an object. It prepares the new object for use, often accepting arguments that the constructor uses to set required member variables.

Memory organization

In Java, C# and VB .NET the constructor creates objects in a special memory structure called heap for reference types. Value types (such as int, double etc.), are created in a sequential structure called stack.

И для конструктора есть обратная функция - деструктор. А что делает деструктор? Удаляет объект.
FishHook
cutwater
Поскольку если к примеру говорить о С++, то объект класса создается при помощи оператора new, который выделяет память для объекта
Ну да, вы правы. И именно __new__ принимая данные для создания нового объекта является конструктором.
FishHook
cutwater
должен создавать объект.
ИМХО, конструктор именно статический метод, создающий объект. В Каком ООП ЯП это не так?
cutwater
py.user.next
И для конструктора есть обратная функция - деструктор. А что делает деструктор? Удаляет объект.

Что подразумевается под удалением объекта? Если ваше понимание удаления объекта включает в себя освобождение занимаемой им памяти, то Ваше утверждение не верно, как минимум для С++.

In object-oriented programming, a destructor (dtor) is a method which is automatically invoked when the object is destroyed.
Wikipedia
Конкретно здесь сказано, что деструктор автоматически вызывается во время удаления объекта. Что несколько противоречит утверждению “Деструктор удаляет объект”.

FishHook
ИМХО, конструктор именно статический метод, создающий объект. В Каком ООП ЯП это не так?

Вау, Вы уже добавили понятие “статический” в определение конструктора. Встречный вопрос, в каком языке это так?

В C++, Java, C# это не так: конструктор не является статическим, не выделяет память, не возвращает значение (созданный объект). Во всех выше перечисленных языках конструкторы во время вызова имеют ссылку \ указатель на существующий объект (this).

Приведите принципиальные отличия между конструкторами в С++, Java, C# и методом __init__ в Python.
4kpt_V
cutwater
Что Вы в си вцепились? Я же говорю. Определения СИ вообще никак не соосны с ООП. Там народ что хочет то так и называет. Если я не ошибаюсь, то каноничным с точки зрения создателей ООП был все же SmallTalk. Туда и надо таращиться. Но вот лень. Ибо помер он давно
py.user.next
cutwater
Что подразумевается под удалением объекта? Если ваше понимание удаления объекта включает в себя освобождение занимаемой им памяти, то Ваше утверждение не верно, как минимум для С++.
Освобождается место в памяти, которое он занимает и удаляется ссылка из ссылочной таблицы. В питоне оператор del это делает. del отвязывает имя от ссылки на объект, затем сборщик мусора потом, когда будет удобное время, находит этот объект, к которому никто не обращается нигде, освобождает память и удаляет ссылку.
FishHook
cutwater
Вау, Вы уже добавили понятие “статический” в определение конструктора.
Это не я добавил, это вытекает из определения. Любой метод статический, пока нет ссылки на объект. Поэтому создать объект может только статический метод. Назовем статический метод, который создает новый объект конструктором, и вот вам конструктор, в любом ООП языке.
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