Форум сайта python.su
fata1ex
vault, вы ошиблись. Деструктор вызывается как раз при удалении объекта. И это вполне очевидно, если подумать. Не говоря уже о том, что об этом написано в документации и в огромной куче других мест )
Офлайн
То есть метод не будет вызван, если на экземпляр класса существует хотя бы одна ссылка.
Офлайн
Почему он должен быть вызван? Если на него ссылаются, значит он кому-то нужен.
Офлайн
Я, пожалуй, неточно выразился. Имел ввиду вот что:
class undead: def __del__ (self): print "I'm dead" c2 = undead() c1 = c2 del c2 del c1
Офлайн
Soteric
Почему он должен быть вызван? Если на него ссылаются, значит он кому-то нужен.
Офлайн
Все логично. Есть один объект и на него две ссылки: c1 и c2. При присвоении c1 = c2 не происходит копирования объекта, просто одна переменная начинает ссылаться на то же самое значение что и другая. Командой del вы удаляете ссылку, а не сам объект. Когда ссылок не остается, объект удаляется сборщиком мусора. Что здесь выглядит нелогичным?
В каком языке происходит так как вы ожидаете?
Отредактировано Soteric (Июнь 22, 2012 22:14:46)
Офлайн
Soteric
Все логично. Есть один объект и на него две ссылки: c1 и c2. При присвоении c1 = c2 не происходит копирования объекта, просто одна переменная начинает ссылаться на то же самое значение что и другая. Командой del вы удаляете ссылку, а не сам объект. Когда ссылок не остается, объект удаляется сборщиком мусора. Что здесь выглядит нелогичным?
В каком языке происходит так как вы ожидаете?
Офлайн
vault, об этом обо всём вполне однозначно сказано в документации. А значит результат работы будет предсказуемым для всех, кто удосужился её прочитать.
Метод __del__ вызывается при удалении последней ссылки на объект, по идее.А вот такие фразы говорят, что вы документацию не читали. Так какие претензии?
vaultБгг. Давайте на спор посмотрим все вместе, где больше ереси: в питоне или в C++? Разумеется, деструкторы в С++ работают совершенно по-другому, потому что язык работает совершенно по-другому.
Ну, например C++. Там удаляешь объект - вызывается деструктор. Удаляешь ссылку - не вызывается деструктор. Все четко и логично.
Отредактировано fata1ex (Июнь 22, 2012 22:44:13)
Офлайн
fata1ex
Бгг. Давайте на спор посмотрим все вместе, где больше ереси в питоне или в C++? Разумеется деструкторы в С++ работыю совершенно по-другому, потому что язык работает совершенно по-другому.
Офлайн
vaultИ давно ли? :)
питон отказался от динамического приведения типов
Офлайн