self=pickle.load(file)? (Object loads itself)

Gary Herron gherron at islandtraining.com
Sat Aug 12 12:57:13 EDT 2006


Anton81 wrote:
> Hi!
>
> it seems that
>
> class Obj:
>         def __init__(self):
>                 f=file("obj.dat")
>                 self=pickle.load(f)
> ...
>
> doesn't work. Can an object load itself with pickle from a file somehow?
> What's an easy solution?
>
> Anton
>   
That won't work, but the following will. An object's attributes can be 
accessed and set through the __dict__ attribute, and its class through 
the __class__ attribute:


 >>> class A: # define class A
... pass
...
 >>> a = A() # create an instance
 >>> a.__dict__ # It has no attributes
{}
 >>> a.__dict__ = {'c':1, 'b':2} # Give it some
 >>> a.b # Verify
2
 >>> a.c
1
 >>> a.__class__ # Examine its class
<class __main__.A at 0xb7da12fc>

 >>> class B:
... pass
...
 >>> a.__class__ = B # Change its class
 >>> a.__class__ # Verify
<class __main__.B at 0xb7da129c>

Both the __dict__ and the __class__.__name__ could be pickled.

Gary Herron





More information about the Python-list mailing list