On Mon, 17 Jul 2000, Chris McDonough wrote:
Jeff, what exactly do you need to do with setstate? can you provide an example?
I am simply trying to "upgrade" a persistent instance of a Python class. For instance: class MyClass: def __init__(self, id, title=''): self.myAttr1 = 'Value 1' def getMyAttr1(self): return self.myAttr1 Imagine that I use the class, as defined above, for a while, then decide I need to modify it as follows: class MyClass: def __init__(self, id, title=''): self.myAttr1 = 'Value 1' self.myAttr2 = 'Value 2' def getMyAttr1(self): return self.myAttr1 def getMyAttr2(self): return self.myAttr2 I already have a few instances of MyClass in the ZODB, and they only have myAttr1; myAttr2 is not defined on existing instances, since they will not be constructed via the new __init__. Therefore, getMyAttr2() will throw an exception. The simple solution is to also define __setstate__: def __setstate__(self, state): Persistent.__setstate__(self, state) if not hasattr(self, 'myAttr2'): self.myAttr2 = 'Value 2' Now, when the old instances of my object are de-ghosted from the ZODB, __setstate__ notices that they don't have a myAttr2, and sets it to the value normally given by the constructor. Unfortunately, in my case, 'Value 2' is an instance of a ZClass. Therefore, I need to get at Control_Panel. Hope this helps. Now I'm going to try Shane's wacky __of__ idea. :-) --Jeff --- Jeff K. Hoffman 704.849.0731 x108 Chief Technology Officer mailto:jeff.hoffman@goingv.com Going Virtual, L.L.C. http://www.goingv.com/