Proper class initialization
Larry Bates
larry.bates at websafe.com
Wed Mar 1 22:01:48 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?
>
> -- Christoph
Although I've never had the need for something like this,
this works:
class A:
sum=0
for i in range(10):
sum+=i
del i
or moving the initialization into __init__ method isn't
terribly inefficient unless are are creating LOTS of
instances of the same class.
class A:
def __init__(self):
self.sum=0
for i in range(10):
self.sum+=i
or you can do the do it before you instantiate the class
class A:
def __init__(self, initialvalue=None):
if initialvalue is not None: self.sum=initialvalue
else: self.sum=0
for i in range(10):
sum+=i
b=A(sum)
c=A(sum)
-Larry Bates
More information about the Python-list
mailing list