python class instantiation

Chetan pandyacus.xspam at xspam.sbcglobal.net
Mon Oct 23 18:35:12 EDT 2006


Éric Daigneault wrote:
>Got a question for you all...
>
>I noticed a behaviour in python class creation that is strange, to say the
>least.
>
>When creating a class with data members but no __init__ method.  Python deals
>differently with data members that are muatable and immutables.
>
>Ex:
>class A(object):
>    stringData = "Whatever"
>    listData = []
>
>instance = A()
>
>Will have data members instantiated as expected (instance.stringData ==
>"Whatever" and instance.listData == [])
>
>instance.listData.append("SomeString")
>instance.stringData = "Changed"
>
>Now if I do
>
>secondInstance = A()
>
>it will come with the listData containing the SomeString appended to the
>instance...
>
>this is clearly not normal
>
>Especially that the stringData of Second instance contains the "Whatever" text.
>If the behaviour was at least consistant...  but it is not...
>
>Am I coing nuts or is this by desing, if so it is very misleading...  The two
>instances are sharing the same list, but not the same string ...  I did not
>declare the list to be static in any way....  Why does it behave like this ?
>
>Éric
This is not what I get :
Here is the code and the output for 2.5
class A(object):
    stringData = "Whatever"
    listData = []

inst = A()

print inst.stringData
print inst.listData
print

inst.listData.append("SomeString")
inst.stringData = "Changed"

inst2 = A()

print inst2.stringData
print inst2.listData
print

inst.listData.append("NewThing")
inst.stringData = "NewChanged"

print inst.stringData
print inst.listData
print inst.stringData
print inst.listData
print

-----
Whatever
[]

Whatever
['SomeString']

NewChanged
['SomeString', 'NewThing']
NewChanged
['SomeString', 'NewThing']

Isn't this what you got?

-Chetan



More information about the Python-list mailing list