On Tue, 06 Aug 2013 18:38:51 +0200 Stefan Behnel <stefan...@behnel.de> wrote: > Antoine Pitrou, 06.08.2013 17:49: > > Le Tue, 06 Aug 2013 17:18:59 +0200, > > Stefan Behnel a écrit : > >> If a Python class with a > >> __del__ inherits from an extension type that implements > >> tp_finalize(), then whose tp_finalize() will be executed first? > > > > Then only the Python __del__ gets called. It should call > > super().__del__() manually, to ensure the extension type's > > tp_finalize gets called. > > Ok, but then all I have to do in order to disable C level finalisation for > a type is to inherit from it and provide an empty __del__ method. > > I think that disqualifies the feature for the use in Cython. Finalisation > at the Python level is nice, but at the C level it's usually vital. I had > originally read this PEP as a way to get better guarantees than what > dealloc can provide, but your above statement makes it rather the opposite.
Anything vital should probably be ensured by tp_dealloc. For example, you might close an fd early in tp_finalize, but also ensure it gets closed in tp_dealloc in the case tp_finalize wasn't called. (that said, you can also have fd leaks in pure Python...) Regards Antoine. _______________________________________________ Python-Dev mailing list Python-Dev@python.org http://mail.python.org/mailman/listinfo/python-dev Unsubscribe: http://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com