On Thu, Sep 3, 2015 at 9:23 AM, Valentine Sinitsyn <valentine.sinit...@gmail.com> wrote: > Hi Armin, > > On 25.08.2015 13:00, Armin Rigo wrote: >> >> Hi Valentine, >> >> On 25 August 2015 at 09:56, Valentine Sinitsyn >> <valentine.sinit...@gmail.com> wrote: >>>> >>>> Yes, I think so. There is a *highly obscure* corner case: __del__ >>>> will still be called several times if you declare your class with >>>> "__slots__=()". >>> >>> >>> Even on "post-PEP-0442" Python 3.4+? Could you share a link please? >> >> >> class X(object): >> __slots__=() # <= try with and without this >> def __del__(self): >> global revive >> revive = self >> print("hi") >> >> X() >> revive = None >> revive = None >> revive = None > > By accident, I found a solution to this puzzle: > > class X(object): > __slots__ = () > > class Y(object): > pass > > import gc > gc.is_tracked(X()) # False > gc.is_tracked(Y()) # True > > An object with _empty_ slots is naturally untracked, as it can't create back > references. > > Valentine > > _______________________________________________ > Python-Dev mailing list > Python-Dev@python.org > https://mail.python.org/mailman/listinfo/python-dev > Unsubscribe: > https://mail.python.org/mailman/options/python-dev/fijall%40gmail.com
That does not make it ok to have del called several time, does it? _______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com