What's the difference between initializing class variables within the
class definition directly versus initializing them within the class's
__init__ method? Is there a reason, perhaps in certain situations, to
choose one over the other?
You are confusing class variables with instance variables. The former
are what you can initialize inside the class-statement. However, they
are shared amongst _all_ instances. Consider this little example:
class Foo(object):
FOO = 1
BAR = []
def __init__(self, FOO):
self.FOO = FOO
self.BAR.append(FOO)
def __repr__(self):
return "FOO: %r\nBAR: %r\n" % (self.FOO, self.BAR)
f1 = Foo(1)
print f1
f2 = Foo(2)
print f2
print f1
------
meskal:~/Projects/CameraCalibrator deets$ python2.4 /tmp/test.py
FOO: 1
BAR: [1]
FOO: 2
BAR: [1, 2]
FOO: 1
BAR: [1, 2]
-----
As you can see, the list BAR is shared. And you can also see that
_assigning_ to something like this:
self.FOO
will create an instance-variable. Even if a variable of the same name
existed on the class before!
Which is precisely the difference between using variable initialization
in __init__ and inside the class-statement.
BTW,
self.__class__.FOO = value
will set class-variables inside a method. Just if you wondered.
Diez