[Tutor] How to replace instances

Kent Johnson kent37 at tds.net
Thu Sep 25 12:58:56 CEST 2008


On Thu, Sep 25, 2008 at 4:24 AM, Steve Collins <emperor.ghaz at gmail.com> wrote:

> However, some of the instances refer explicitly to other instances
> instances. It's obvious why this causes problems. It occurred to me to
> simply replace the instances with the ones in the un-pickled list, but I
> don't know how.

> I tried using the following approach:
>
> class Z:
>     def __init__(self,y):
>         self.y = y
>     def replaceZ (self,withWhat):
>         self = withWhat

'self' is just another parameter passed to the method, so this just
rebinds a local name.

This example doesn't seem to illustrate the situation you describe.
You can replace the 'y' attribute of a Z object by assigning to it.

One solution might be to make all your objects pickleable. Pickle
tracks object references and handles embedded references correctly.

> That doesn't raise any errors, but it also doesn't work:
>
>>>> a = X(10)
>>>> b = X(20)

Presumably this should be Z(10), Z(20) ?
>>>> print a.y
> 10
>>>> print b.y
> 20
>>>> b.replaceZ(a)
>>>> print b.y
> 20

If you want 'b' to refer to the same thing as 'a', just assign
b = a

I think you have some common misconceptions about the nature of
variables and assignment in Python. This may help:
http://personalpages.tds.net/~kent37/kk/00012.html

Kent


More information about the Tutor mailing list