Stefan Behnel, 06.08.2013 18:38:
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.
Oh, and if the Python subtype calls super().__del__() twice, then there is no longer a guarantee that the finalisers only get executed once, right? I think it's time for at least a very visible warning in the docs that the behaviour is only 'guaranteed' for types that cannot be subtyped from Python, and that Python subtypes are free to break up the call chain in whatever way they like. Stefan