On Nov 1, 11:02 pm, Makoto Kuwata <k...@kuwata-lab.com> wrote: > Hi, > > I want to define a special class which groups functions, like: > > class Greepting(FuncGroup): > def hello(): # no self, no @staticmethod! > print("Hello!") > def goodbye(): # no self, no @staticmethod! > print("Good Bye!") > > Geeting.hello(): #=> "Hello!" > Geeting.goodbye(): #=> "Good Bye!" > > I tried the following code which converts instance mthods into > static method automatically, but I don't get result what I want. > (python 2.5.5) > > import sys > from types import FunctionType > > class MetaClass(type): > def __init__(cls, name, bases, dct): > ## converts instance methods to static methods automatically > for k in dct.keys(): > v = dct[k] > if isinstance(v, FunctionType): > dct[k] = staticmethod(v) > print("*** debug: dct[%r] = %r" % (k, dct[k])) > #=> <staticmethod object at 0x100378d38> > > class FuncGroup(object): > __metaclass__ = MetaClass > > class Greeting(FuncGroup): > def hello(): > print("Hello!") > def goodbye(): > print("Good Bye!") > > print("*** type(Greeting.hello)=%r" % type(Greeting.hello) > #=> <type 'instancemthod'> > print("*** type(Greeting.goodbye)=%r" % type(Greeting.goodbye) > #=> <type 'instancemthod'> > > Could you give me advice? > > -- > regards, > makoto kuwata
I think you need to unwrap the instance methods first: >>> class foo(object): ... def bar(): ... print "Hi there" ... >>> foo.bar2 = staticmethod(foo.bar.im_func) >>> >>> foo.bar2() Hi there >>> -- http://mail.python.org/mailman/listinfo/python-list