class Closer( object ):
"""Close the OIDStore (without a __del__)"""
def __init__( self, btree ):
"""Initialise the closer object"""
self.btree = btree
def __call__( self, oldObject=None ):
"""Regular call via self.close or weakref deref"""
if self.btree:
self.btree.close()
self.btree = None
class BSDOIDStore(oidstore.OIDStore):
def __init__( self, filename, OIDs = None ):
"""Initialise the storage with appropriate OIDs"""
self.btree = self.open( filename )
self.update( OIDs )
self.close = Closer( self.btree )
weakref.ref( self, self.close )but the self.close reference in the instance is going away *before* the object is called.
So, this approach doesn't *seem* to work (the Closer doesn't get called), so I can gather that the callbacks don't get incref'd (or they get decref'd during object deletion).
I can work around it in this particular case by defining a __del__ on the Closer, but that just fixes this particular instance (and leaves just as many __del__'s hanging around). I'm wondering if there's a ready recipe that can *always* replace a __del__'s operation?
I know I heard a rumour somewhere about Uncle Timmy wanting to eliminate __del__ in 2.5 or thereabouts, so I gather there must be *some* way of handling the problem generally. The thing is, weakref callbacks trigger *after* the object is deconstructed, while __del__ triggers before... must be something clever I'm missing.
Throw an old doggie a bone? Mike
________________________________________________ Mike C. Fletcher Designer, VR Plumber, Coder http://www.vrplumber.com http://blog.vrplumber.com
-- http://mail.python.org/mailman/listinfo/python-list
