On 07/11/05, DS <[EMAIL PROTECTED]> wrote: > So, I can see the error of my ways. I can also see that this behavior > gives me an opportunity to globally change a value in all of the object > instances, if I ever had to do something like that. I just don't have a > clue as to why objects were designed this way. > > Can anyone point me in the right direction?
The difference is between class objects and class instances. When you say "class Foo: ...", you are creating a class object. When you call a class object, you create an instance of that class. Let's have a look: >>> class Foo(object): ... testList = [] ... print 'Foo class object being created now!' ... def __init__(self): ... self.testList2 = [] ... print 'Foo instance being initialised now!' ... Foo class object being created now! >>> Foo <class '__main__.Foo'> When I hit <return>, the python interpreted executed the class definition. This is why it printed out "Foo class object being created now!". This is also when it executed "testList = []". testList is an attribute of Foo: >>> Foo.testList [] >>> Foo.testList.append(5) >>> Foo.testList [5] On the other hand, the code in Foo.__init__ did not execute. That code will only execute when we create an instance of Foo. So, Foo has no testList2 attribute, because "self.testList2 = []" only happens in __init__. >>> Foo.testList2 Traceback (most recent call last): File "<stdin>", line 1, in ? AttributeError: type object 'Foo' has no attribute 'testList2' We can create an instance in the usual way, by calling the class object: >>> f = Foo() Foo instance being initialised now! Now, we can get at testList2. >>> f.testList2 [] We can also get at testList in the same way --- but testList belongs to the class, not the instance. >>> f.testList [5] >>> f.testList is f.__class__.testList is Foo.testList True I guess the same thing happens with methods --- that there is only one copy of each method --- but you don't notice, becuase when you call a method on an instance, it gets passed the instance as the first parameter. Hope this helps! -- John. _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor