Style question - defining immutable class data members
John Posner
jjposner at snet.net
Sun Mar 15 13:39:43 EDT 2009
(My apologies if the thread has already covered this.) I believe I understand the WHAT in this situation, but I don't understand the WHY ...
Given this class definition:
class Cls(object):
x = 345
... I observe the following, using IDLE 2.6.1:
>>> inst = Cls()
>>> Cls.x is inst.x
True
>>> Cls.x += 1
>>> Cls.x is inst.x
True
>>> inst.x += 1
>>> Cls.x is inst.x
False
My question is ... WHY does the interpreter silently create the instance attribute at this point, causing a "surprising decoupling" from the class attribute? WHY doesn't the interpreter behave as it would with a simple, non-instance variable:
> python
Python 2.6.1 ...
Type "help", "copyright", "credits" or "license" for more information.
>>> x += 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'x' is not defined
Is there a beneficial effect of silently creating the instance attribute, which outweighs the detrimental effects: (1) inconsistency, (2) the "surprising" decoupling?
Tx,
John
More information about the Python-list
mailing list