LINUX.ORG.RU

Инстансы в питоне не существуют?

 ,


0

1

Вычитал вот тут: https://en.wikipedia.org/wiki/Metaclass

At run time, Car itself is an instance of type. The source code of the Car class, shown above, does not include such details as the size in bytes of Car objects, their binary layout in memory, how they are allocated, that the __init__ method is automatically called each time a Car is created, and so on. These details come into play not only when a new Car object is created, but also each time any attribute of a Car is accessed.

То есть получается, что инстансы вообще не существуют, а при каждом обращении заново создаются? Или все их слоты?

ЗЫ Я, по-ходу, вообще не правильно понял принцип. Я думал, что инит сеттит только дефолтные поля, а он там оказывается как то на конструктор завязан. А зачем так сделали? Почему нельзя отдельно инит и отдельно конструктор определить?

То есть инит в питоне — это просто конструктор? Но, даже если и так, все равно я не понял зачем его вызывать каждый раз при обращении к полям.



Последнее исправление: cetjs2 (всего исправлений: 8)
Ответ на: комментарий от agregationcompose

Существование какого-то объекта можно проверить. Возьми, создай инстанс и проверь. И всем расскажи.

То есть получается, что инстансы вообще не существуют, а при каждом обращении заново создаются? Или все их слоты?

А что же происходит, когда меняем или добавляем отдельный слот непосредственно в инстанс?

  • проверь существуют ли инстанса
  • создаются ли при каждом обращении инстансы
  • создаются ли их слоты
  • проверь что происходит, когда меняем или добавляем отдельный слот в непосредственно инстанс
bryak ★★★★
()
Последнее исправление: bryak (всего исправлений: 1)
Ответ на: комментарий от agregationcompose

При каждом создании объекта вызывается инит (логично, правда?) - написано в твоей же цитате. А не при каждом обращении к объекту.

curufinwe ★★★★★
()
Ответ на: комментарий от agregationcompose

Может надо всё прочитать, а не только одно предложение?

such details as the size in bytes of Car objects, their binary layout in memory, how they are allocated

doraneko
()
Ответ на: комментарий от doraneko

Я, по-ходу, вообще не правильно понял принцип. Я думал, что инит сеттит только дефолтные поля, а он там оказывается как то на конструктор завязан. А зачем так сделали? Почему нельзя отдельно инит и отдельно конструктор определить?

agregationcompose
() автор топика
Ответ на: комментарий от doraneko

То есть инит в питоне — это просто конструктор? Но, даже если и так, все равно я не понял зачем его вызывать каждый раз при обращении к полям.

agregationcompose
() автор топика
Ответ на: комментарий от agregationcompose

__init__ - это конструктор инстанса, когда создаётся новый инстанс, вызывается этот метод. При обращении к полям он не вызывается. Почитай про классы в питоне сначала, а уже потом про метаклассы.

doraneko
()
Ответ на: комментарий от doraneko

Ок, я может вот эту цитату не правильно понял. Переведи мне ее пожалуйста на русский

These details come into play not only when a new Car object is created, but also each time any attribute of a Car is accessed.

agregationcompose
() автор топика

Люди все-таки хорошие на ЛОРе. Искренне пытаются помочь, просто не понимают, что такая «помощь» делает бедному шизофренику только хуже.

thesis ★★★★★
()
Ответ на: комментарий от doraneko

а про инит я понял. Это прослойка для конструктора.

Между прочим, решение весьма уродское. Весь ее смысл только в том, чтобы при создании объекта не писать явно объект, его туда подставляет реализация.

agregationcompose
() автор топика
Ответ на: комментарий от agregationcompose

Эта фраза не относится к иниту, там путано написано. Инит при каждом обращении к полям конечно же не вызывается. К тому же ты читаешь про метаклассы, а не про классы.

curufinwe ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.