automatic (un-)pickling / overwriting self

Alex Martelli aleax at
Fri Mar 7 16:42:08 CET 2003

Clemens Hermann wrote:

> Hi,
> while working on a cgi-admin interface i got a little problem with
> pickle.
> I use a hierarchical class structure to keep users, permissions, etc.
> As the amount of data is quite small i just pickle the top class
> instance that references the rest.

So far so good...

> I am looking for a way to automatically pickle the top class whenever
> one of the referenced object changes.

That's pretty hard indeed, to put it mildly; you'd basically have
to wrap every "referenced object" into the Observed side of an
Observed/Observer patter, catch EVERY change (a VERY tall order
indeed, with the amount of indirections being unbounded) and do
a callback to the top-class Observer.  I would urge you to look
for a much easier and less-general approach.

> Furthermore I want a class
> instance to unpickle the data automatically on creation.
> A self = unpickledObject in __init__ does not work (probably a bad
> idea anyway :).

You can code the class's __new__ method to return the unpickled
object, and leave its __init__ empty (it's called anyway after
__new__, unless you go for custom metaclasses or play some
strange tricks such as returning something that's NOT actually
an instance of that class).

> So how is automatic/implicite serialization(on changes) and

Too hard to bother with in the general case, IMHO.

> de-derialization(in __init__) from *within* a class instance done?
> Furthermore: How can I make sure that there can only be one instance
> of the top class active at a time?

You want the Singleton design pattern -- but it's not a good idea,
use Borg instead (let there be as many instances as there happen
to be, as long as they all share the same state).  See for example for an in-depth essay on that.


More information about the Python-list mailing list