In [1]: class Foo(object): ...: class Bar(object): ...: def __init__(self): ...: self.str = "gnarf" ...: def __init__(self): ...: self.str = "point" ...: In [2]: b = Foo.Bar() In [3]: f = open("test","w+") In [4]: import pickle as P In [5]: p = P.Pickler(f) In [6]: p.dump(b) --------------------------------------------------------------------------- Traceback (most recent call last) /home/cers/projects/Facebook/ in () /home/cers/projects/Facebook/pickle.py in dump(self, obj) 222 if self.proto >= 2: 223 self.write(PROTO + chr(self.proto)) --> 224 self.save(obj) 225 self.write(STOP) 226 /home/cers/projects/Facebook/pickle.py in save(self, obj) 329 330 # Save the reduce() output and finally memoize the object --> 331 self.save_reduce(obj=obj, *rv) 332 333 def persistent_id(self, obj): /home/cers/projects/Facebook/pickle.py in save_reduce(self, func, args, state, listitems, dictitems, obj) 399 else: 400 save(func) --> 401 save(args) 402 write(REDUCE) 403 /home/cers/projects/Facebook/pickle.py in save(self, obj) 284 f = self.dispatch.get(t) 285 if f: --> 286 f(self, obj) # Call unbound method with explicit self 287 return 288 /home/cers/projects/Facebook/pickle.py in save_tuple(self, obj) 560 write(MARK) 561 for element in obj: --> 562 save(element) 563 564 if id(obj) in memo: /home/cers/projects/Facebook/pickle.py in save(self, obj) 284 f = self.dispatch.get(t) 285 if f: --> 286 f(self, obj) # Call unbound method with explicit self 287 return 288 /home/cers/projects/Facebook/pickle.py in save_global(self, obj, name, pack) 746 raise PicklingError( 747 "Can't pickle %r: it's not found as %s.%s" % --> 748 (obj, module, name)) 749 else: 750 if klass is not obj: : Can't pickle : it's not found as __main__.Bar