Style question - defining immutable class data members

Matthew Woodcraft matthew at woodcraft.me.uk
Sun Mar 15 16:54:17 EDT 2009


John Posner <jjposner at snet.net> writes:

> 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?

I doubt it's because anyone particularly wanted this behaviour; it just
falls out of the way '+=' is defined.

At the point where 'inst.x += 1' is compiled, Python doesn't know
whether 'inst.x' is going to turn out to be a class attribute or an
instance attribute or a property. So really the only thing it can do is
generate code to read inst.x in the usual way and then assign to inst.x
in the usual way (where 'the usual way' for CPython is LOAD_ATTR and
STORE_ATTR).

-M-



More information about the Python-list mailing list