python class instantiation

  • Thread starter =?ISO-8859-1?Q?=C9ric_Daigneault_lists?=
  • Start date
?

=?ISO-8859-1?Q?=C9ric_Daigneault_lists?=

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
 
C

Chetan

Éric Daigneault said:
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,770
Messages
2,569,584
Members
45,075
Latest member
MakersCBDBloodSupport

Latest Threads

Top