Proper class initialization
gry at ll.mit.edu
gry at ll.mit.edu
Thu Mar 2 15:56:09 CET 2006
Christoph Zwerschke wrote:
> Usually, you initialize class variables like that:
>
> class A:
> sum = 45
>
> But what is the proper way to initialize class variables if they are the
> result of some computation or processing as in the following silly
> example (representative for more:
>
> class A:
> sum = 0
> for i in range(10):
> sum += i
>
> The problem is that this makes any auxiliary variables (like "i" in this
> silly example) also class variables, which is not desired.
>
> Of course, I could call a function external to the class
>
> def calc_sum(n):
> ...
>
> class A:
> sum = calc_sum(10)
>
> But I wonder whether it is possible to put all this init code into one
> class initialization method, something like that:
>
> class A:
>
> @classmethod
> def init_class(self):
> sum = 0
> for i in range(10):
> sum += i
> self.sum = sum
>
> init_class()
>
> However, this does not work, I get
> TypeError: 'classmethod' object is not callable
>
> Is there another way to put an initialization method for the class A
> somewhere *inside* the class A?
Hmm, the meta-class hacks mentioned are cool, but for this simple a
case how about just:
class A:
def __init__(self):
self.__class__.sum = self.calculate_sum()
def calculate_sum(self):
do_stuff
return sum_value
Instead of __class__ you could say:
A.sum = self.calculate_sum()
but that fails if you rename the class. I believe either works fine
in case of classes derived from A.
-- George Young
More information about the Python-list
mailing list