__metaclass__を使う

Pythonの "__metaclass__" を使ってみる。
http://www.python.jp/doc/release/ref/metaclasses.html

In [1]: def meta_foo(name, bases, dict):
   ...:     dict['foo'] = lambda self:'meta_foo'
   ...:     return type(name + '_foo', bases, dict)
   ...:

In [2]: class Hoge(object):
   ...:     __metaclass__ = meta_foo
   ...:     def foo(self):
   ...:         return 'hoge_foo'
   ...:     def bar(self):
   ...:         return 'hoge_bar'
   ...:
   ...:

In [3]: h = Hoge()

In [4]: h.foo()
Out[4]: 'meta_foo'

In [5]: h.bar()
Out[5]: 'hoge_bar'

In [6]: def meta_bar(name, bases, dict):
   ...:     dict['bar'] = lambda self:'meta_bar'
   ...:     return meta_foo(name + '_bar', bases, dict)
   ...:

In [7]: class Fuga(object):
   ...:     __metaclass__ = meta_bar
   ...:     def foo(self):
   ...:         return 'fuga_foo'
   ...:     def bar(self):
   ...:         return 'fuga_bar'
   ...:
   ...:

In [8]: f = Fuga()

In [9]: f.foo()
Out[9]: 'meta_foo'

In [10]: f.bar()
Out[10]: 'meta_bar'

In [11]: h
Out[11]: <__main__.Hoge_foo object at 0x015552F0>

In [12]: f
Out[12]: <__main__.Fuga_bar_foo object at 0x01542AF0>

Hogeクラスが生成される前?(インスタンス生成かな)に、辞書を置き換えてる。