Question about metaclass

Makoto Kuwata kwa at kuwata-lab.com
Wed Nov 2 00:02:40 EDT 2011


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


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /