FAQ

Fabien SK <fabsk+news at free.fr> writes:

One solution would be to wrap the parent objet in a new class
(forwarding all the calls to the parent object). In the "__del__"
method of this class, I would clean the list of children object, and
then remove the reference on the parent objet so its "__del__" method
will be called. Am I right ?
I would not wrap the parent object, but the file handle. So do

class Handle:
def __init__(self, *args):
self.h = lib_open(*args)
def read_section(self, *args):
return lib_read_section(self.h, *args)
def __del__(self):
lib_close(self.h)

class Parent:
def __init__(self, ...):
# change
# self.handle = lib_open(...)
# to
self.Handle(...)

Then, the Handle class won't participate in a cycle, and it can safely
have an __del__.
Last question: why does the python file objects not have a "__del__"
method ? How the file can be closed when the last reference is remove
?
If a Python type is implemented in C, it does not need to have an
__del__. Instead, having a tp_del slot in its PyTypeObject C structure
is sufficient.

Regards,
Martin

Search Discussions

Discussion Posts

Previous

Related Discussions

Discussion Navigation
viewthread | post
posts ‹ prev | 2 of 2 | next ›
Discussion Overview
grouppython-list @
categoriespython
postedAug 13, '03 at 8:12a
activeAug 31, '03 at 1:28a
posts2
users2
websitepython.org

2 users in discussion

Fabien SK: 1 post Martin v. Löwis: 1 post

People

Translate

site design / logo © 2022 Grokbase