Hi Maciej, On 04.09.2015 00:08, Maciej Fijalkowski wrote: > On Thu, Sep 3, 2015 at 9:23 AM, Valentine Sinitsyn > <valentine.sinitsyn at 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.sinitsyn at 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 at 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? That's a tricky question. Python's data model [1,2] doesn't say anything about how many times __del__ can be called. PEP-0442 guarantees it will be called only once, but it implicitly covers GC-objects only. For me, it looks like destructor behaviour for non-GC object is undefined, but I agree it makes sense to call them exactly once as well. 1. https://docs.python.org/3/reference/datamodel.html 2. https://docs.python.org/2/reference/datamodel.html -- Valentine
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4