Do I always have to write "self." ?

Martijn Faassen m.faassen at
Fri Apr 28 20:36:04 CEST 2000

Laurent POINTAL <pointal at> wrote:

> *** Note: taking references copies of the self members is the same
> problem as importing * from a module: its only reference copying... 

It's not a problem, Python *always* copies references unless you explicitly
tell it to make a real value copy. I've found it actually quite rare that I
needed a copy by value in my code. This is also why C and C++ code uses
pointers all over the place. C was designed originally with the
idea that copy by value is the most important thing. It's not (though more 
important in C than in Python, as integers and such aren't objects). Now
they're stuck with a zillion pointers to structures and objects.

[snip hack]
> But this is still only a reference copying... if you wants to change
> of referenced object in a member, you must use self.xxxxxx. 

If the referenced object is mutable, you only need self.xxxx once, 
in the beginning of the method, as I demonstrated. You can continue on
with the local variable from then on. Except when you're programming an
object that needs to be persistent in the Zope Object Database; you have
to treat all objects as immutable to make the persistence machinery pick
up your changes and store them. That is, instead of:

# Python
def mymethod(self, foo):


def mymethod(self, foo):
    mylist = self.mylist

You have to do something like:

# Python code for ZODB
def mymethod(self, foo):
    mylist = self.mylist
    self.mylist = mylist

def mymethod(self, foo):
    self.mylist = self.mylist

Ugly, but it works.


History of the 20th Century: WW1, WW2, WW3?
No, WWW -- Could we be going in the right direction?

More information about the Python-list mailing list