Using classes in python

Éric Daigneault daigno at gmail.com
Wed Oct 25 23:15:47 CEST 2006


trevor lock wrote:
> Hello,
>
> I've just started using python and have observed the following :
>
> class foo:
>     a=[]
>     def __init__(self, val):
>             self.a.append ( val )
>     def getA(self):
>             print self.a
>             return self.a
>
> z = foo(5)
> y = foo(4)
> z.getA()
> >> [5, 4]
>
> I was expecting that everytime I created an instance of the class that 
> a unique dictionary was also created, however it seems that only one 
> dictionary is created.
Yep...  Normal...

I just asked the question here a couple days ago...  I felt like I 
bumbed into a wall, even reported as a bug...

Turned out Guido and his bunch cleaned the window so nicely I bumbed 
right into it.....  All I had to do is open the door :-)

http://youtube.com/watch?v=6E7urz5rXVc&mode=related&search=

No really, jokes appart here goes :

"a" here is a *class* attribute.  When you create a new *Instance* of a 
class you can access the atttribute of the class.  But what you need is 
a Instance attribute...

Try this

class toto:
    list = []
    def __init__(self,
                 val):
        self.list = []
        self.list.append(val)
        toto.list.append(val)
       
    def getList(self):
        return self.list
   
    def getClassList(self):
        return toto.list
   
if __name__ == '__main__':
    toto1 = toto(6)
    titi1 = toto("Patate")
   
    print toto1.getList()
    print titi1.getList()
    print toto1.getClassList()
    print titi1.getClassList()


running this gives :

[6]
['Patate']
[6, 'Patate']
[6, 'Patate']

Therefore creating an instance of toto creates *two* instances of the 
list attribute.  The object instance overshadowing the class attribute...
>
> How can I create a new dictionary for each instance?
Simple answer is therefore to place variable declaration in the __init__ 
method...
>
> Thanks,
> Trevor.




More information about the Python-list mailing list