Style question - defining immutable class data members
Terry Reedy
tjreedy at udel.edu
Sat Mar 14 14:26:40 EDT 2009
Maxim Khitrov wrote:
> On Sat, Mar 14, 2009 at 12:50 PM, MRAB <google at mrabarnett.plus.com> wrote:
>> Maxim Khitrov wrote:
>>> Very simple question on the preferred coding style. I frequently write
>>> classes that have some data members initialized to immutable values.
>>> For example:
>>>
>>> class Test(object):
>>> def __init__(self):
>>> self.some_value = 0
>>> self.another_value = None
>>>
>>> Similar effect can be achieved by defining some_value and
>>> another_value for the entire class, like so:
>>>
>>> class Test(object):
>>> some_value = 0
>>> another_value = None
>>>
>>> The advantage of doing this is that the assignments are evaluated once
>>> and thus the creation of that class is a bit faster. Access is still
>>> performed through self.some_value and self.another_value. Is there a
>>> reason to prefer the first style over the second?
>>>
>> In the first case each instance has its own attributes, whereas in the
>> second case the attributes belong to the class and are thus shared by
>> all the instances. Which you use depends on whether you want them shared
>> or not.
>
> When the types are immutable, there is no difference. The second case
> is faster and consumes less memory (initially), but nothing else
> changes. I'm simply asking if it is considered poor style to define
> data members for the class when they are only used by instances.
If they are class constants (the same for all instances, I would define
them as such. If duplicated for all instances in __init__, I would
expect there to be methods that replace them. I particular, I would
expect that .some_value would possibly get a value other than 0.
More information about the Python-list
mailing list