Maxim Khitrov wrote:
On Sat, Mar 14, 2009 at 12:50 PM, MRAB <goo...@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.
--
http://mail.python.org/mailman/listinfo/python-list