automatic (un-)pickling / overwriting self
aleax at aleax.it
Fri Mar 7 16:42:08 CET 2003
Clemens Hermann wrote:
> while working on a cgi-admin interface i got a little problem with
> 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
http://www.aleax.it/Python/5ep.html for an in-depth essay on that.
More information about the Python-list