kなんとかの日記 このページをアンテナに追加

2008-10-18

クラスに対して動的にメソッドを追加する

| 11:29 |  クラスに対して動的にメソッドを追加する - kなんとかの日記 を含むブックマーク

Python で、クラスに対してあとから動的にメソッドを追加するには、new モジュールを使う。

import new

class Foo(object):
    pass

obj = Foo()
obj.f1("abc")   #=> AttributeError: 'Foo' object has no attribute 'f1'

def f1(self, arg):
    print repr(arg)

Foo.f1 = new.instancemethod(f1, None, Foo)
obj.f1("abc")   #=> 'abc'

new モジュールはこの他にも、

を動的に定義できる。

morchinmorchin 2008/10/20 11:30 3.0でnewモジュールはなくなり代わりにtypes.MethodTypeを使うみたいです。

参考:
http://d.hatena.ne.jp/mopemope/20081017/p2

kwatchkwatch 2008/10/22 00:52 情報ありがとうございます。
2.6 でも結構 deprecated になったモジュールあるようですね。
2.6 インストールしたら Mercurial が警告だらけになってしまいました。