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/
このメタクラスのエッセイを読むと脳みそが爆発するらしい。