Metaclass

メタクラスというものを知った。Smalltalkでは当たり前らしい。
Smalltalk勉強してみたいな〜と思いつつ、Pythonメタクラスを体験。
途中までメモ

type( 'ネーミングセンスあふれるクラス名', (スーパークラスのtuple), { メンバのDictionary } )

>>> Foo = type( 'foooo', (), { 'value' : 256, 'expt' : (lambda self, x : 2**x) } )
>>> f = Foo()
>>> f.value
256
>>> f.expt( 10 )
1024
>>> Hoge = Foo
>>> Hoge().expt( 8 )
256

>>> type( 'aaa', (), { 'func' : (lambda self, x : -x) } )().func( -10 )
10
>>> Potato = type( 'pp', (), { 'fn' : (lambda self, x : x + 5) } )
>>> Tomato = type( 'tt', ( Potato, ), { 'fn' : (lambda self, x : Potato.fn( self, x ) + 5) } )
>>> Tomato().fn( 90 )
100

typeを継承するだの、まだまだ奥が深いみたいですがとりあえずこの辺で。
参考:http://hehe.s9.xrea.com/html/python.rst.html#id3
メモ:http://www.ibm.com/developerworks/jp/linux/library/l-pymeta/


Instant Pythonのページに書かれていたけど、
http://www.python.org/doc/essays/metaclasses/
このメタクラスのエッセイを読むと脳みそが爆発するらしい。