[Twisted-Python] Nested objects in pickle (was: Large projec t (IMS) architecture)
Patrick K. O'Brien
pobrien at orbtech.com
Sat Jan 18 12:59:58 MST 2003
On Thursday 16 January 2003 01:09 pm, Rick Richardson wrote:
> The has-a nested relationships seem to work. Is it the is-a that is
> broken in pickle? I never knew that to be a nested relationship.
Not quite. The real issue concerns classes and functions defined within
other classes, functions, or methods. Pickling only works on objects
defined at the "top" level of a module. Here is an example:
>>> import pickle
>>> class Foo:
... def __init__(self):
... class Bar:
... def __init__(self):
... self.type = 'Nested class'
... self.bar = Bar()
...
>>> foo = Foo()
>>> foo.bar.type
'Nested class'
>>> s = pickle.dumps(foo)
>>> foo2 = pickle.loads(s)
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "/usr/local/lib/python2.2/pickle.py", line 986, in loads
return Unpickler(file).load()
File "/usr/local/lib/python2.2/pickle.py", line 597, in load
dispatch[key](self)
File "/usr/local/lib/python2.2/pickle.py", line 767, in load_inst
klass = self.find_class(module, name)
File "/usr/local/lib/python2.2/pickle.py", line 824, in find_class
klass = getattr(mod, name)
AttributeError: 'module' object has no attribute 'Bar'
>>>
For more pickling details see my article at
http://www-106.ibm.com/developerworks/library/l-pypers.html as well as the
section of the Python documentation dealing with Pickling limitations at
http://www.python.org/doc/current/lib/node62.html.
--
Patrick K. O'Brien
Orbtech http://www.orbtech.com/web/pobrien
-----------------------------------------------
"Your source for Python programming expertise."
-----------------------------------------------
More information about the Twisted-Python
mailing list