[Zope] Semi-persistent objects, volatile attributes

Alexander Staubo alex@mop.no
Fri, 27 Aug 1999 16:36:50 +0200


> Alexander Staubo wrote:
> > 
> > Is it possible to have persistent objects with attributes 
> that are only
> > persistent in memory?
> 
> Yes, but it takes some work and the mechanism need to be formalized.
> Would you want to specify this on a per-class or per-instance basis?

That would be great. Personally? Per class. But wouldn't it be possible
to do something like

	self._p_nodeactivate = 1

or was that being too naive? :)
 
[snip]
> > 
> >   def my_method(self):
> >     self._v_foo = (hasattr(self, '_v_foo') and self._v_foo) or
> > '<default>'
> 
> This is one way.
>  
> > ...ad tedium if you have lots of methods.
> 
> Yup.
> 
> > Does the persistence engine
> > support an "onload" mechanism which you can override to 
> know when your
> > instance has been loaded and needs to initialize itself?
> 
> Yup, it's called __setstate__.  __setstate__ is called when
> the object state is loaded. You can overload __setstate__
> and initialize any volitile variables when you load your state:
> 
> 
> class C:
>   def __setstate__(self, state):
>      C.inheritedAttribute('__setstate__')(self, state)
>      self._v_spam=.....

Just what I was looking for. Yum, thanks. For future reference and
posterity's sake, is this stuff documented anywhere except in the UML
documentation?

> Jim
> 
> --
> Jim Fulton           mailto:jim@digicool.com   Python Powered!        
> Technical Director   (888) 344-4332            http://www.python.org  
> Digital Creations    http://www.digicool.com   http://www.zope.org    

-- 
Alexander Staubo             http://www.mop.no/~alex/
"Give me an underground laboratory, half a dozen atom smashers and a
beautiful girl in a diaphanous veil waiting to be turned into a
chimpanzee, and I care not who writes the nation's laws."
--S. J. Perelman