# [Tutor] dynamic class method creation?

Lloyd Kvam pythontutor at venix.com
Tue Nov 11 19:41:42 EST 2003

```http://www-106.ibm.com/developerworks/linux/library/l-cpnum.html?ca=dgr-lnxw06NumericalPython
Charming Python: Numerical Python

This article uses a flat attribute to sum the whole array directly.
I think your code would look like:
sum(self.array.flat)

Hope this helps.  (I haven't used numeric or numarray myself.)

> Hi there,
>
> here's my problem:
> I'd like to be able to create a class method dynamically.
> Some background information: I am using the Numeric module which
> provides a nice and fast function called sum() to sum over the elements
> of an array, but only along one axis of the array. Now, I want to sum
> over ALL elements of the array, so I need to apply sum() repeatedly. No
> problem here as long as I know the rank (i.e. the number of axes or
> dimensions) of the array beforehand. Which I do not. Of course I could
> just do the sum recursively, but unfortunately this is quite slow since
> it involves checking conditions at runtime. I need to run this sum
> business like maybe a couple of million times in my program, so slowness
> really is an issue.
>
> Consider the following class. Depending on the rank of the array which
> is used to create a class instance, the sumArray() method should look
> different:
>
> class ArrayContainer:
>   def __init(self, array):
>     self.array = array
>     # create sumArray() method dynamically at this place!
>
>   def sumArray(self):
>     ## if rank of array = 1, i.e. only one axis (e.g. [1, 2, 3]):
>     return sum(self.array)
>     ## if rank of array = 2 (e.g. [[1, 2, 3], [4, 5, 6]]):
>     return sum(sum(self.array))
>     ## if rank of array = n:
>     return sum(sum(...sum(self.array)...))   # call sum() n times
>
> Actually checking the rank of the array INSIDE the sumArray() method
> again decreases speed significantly when running through the check some
> million times!
>
> So, how can this dynamic method creation be achieved? Can I use the exec
> statement for this?
>
>
>
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
>

--
Lloyd Kvam
Venix Corp.
1 Court Street, Suite 378
Lebanon, NH 03766-1358

voice:	603-653-8139
fax:	801-459-9582

```