[Tutor] static method

Christian Tismer tismer@appliedbiometrics.com
Tue, 14 Dec 1999 14:22:46 +0100


"Joseph J. Strout" wrote:
> 
> At 4:18 PM +0100 12/8/99, Sergio Murru wrote:
> 
> >The question is: How can I implement a static method in python??
> 
> You can't.

You can. In addition to Joe's advice which is right, I'd like to
explain:

There is no direct support for class methods. Functions which appear
to be defined in a class context are meant as methods which expect
an instance of the class or a subclass as first parameter.

When a method is called from an instance, a bound method is
created with the usual "self" parameter set to the instance.

When a method is called from a class, this binding does not
happen, and you need to supply an instance of a subclass
as first parameter explicitly.

So far about the standard.
But there are exceptions, for instance (for class:)

>>> class funny:
... 	len = len
... 
>>> funny.len("weird")
5
>>> 

Ok, this is for builtin functions. For Python functions, the
following trick is possible (although I fear Guido's slap:)

>>> class class_method:
... 	def blush(self, arg):
... 		return arg+13
... 	
>>> class funny:
... 	cmeth = class_method().blush
... 
>>> funny.cmeth(29)
42
>>> 

What is going on here?
The point is that a python function will be bound to a method
once and only once. This is done by the class_method() instance
creation. It will not happen again, and when I assign this
bound method in my funny class, the binding has been satisfied
already, and calling funny.cmeth is like calling an ordinary
function.

Not to say that one should do this, but it is in fact possible.

ciao - chris

-- 
Christian Tismer             :^)   <mailto:tismer@appliedbiometrics.com>
Applied Biometrics GmbH      :     Have a break! Take a ride on Python's
Kaiserin-Augusta-Allee 101   :    *Starship* http://starship.python.net
10553 Berlin                 :     PGP key -> http://wwwkeys.pgp.net
PGP Fingerprint       E182 71C7 1A9D 66E9 9D15  D3CC D4D7 93E2 1FAE F6DF
     we're tired of banana software - shipped green, ripens at home