Pythonで動的にメソッドを呼ぶ
インスタンスのメソッドを動的に呼び出す方法はどうするんだろう?と思ってたらなんてことはない。
getattrで関数オブジェクトとして取得して、それに「()」を付けて呼び出せば良かった。
※getattrするので存在しないメソッドを呼んだ場合は例外が送出される。
Target(object): def foo(self): print foo target = Target() target.foo() #> foo methodname = 'foo' try: method = getattr(target, methodname) except AttributeError: exit method() #> foo
みたいな感じでできる。
スコープの外から呼んでも大丈夫だけど、GCの都合もあるので使い終わったら参照切るようにした方がいいかも。と思ったけど確実に切れるかって言うとそうでもないしまあ。よしなに。
# -*- coding: utf-8 -*- class Temp(object): def __init__(self): self.tempparam = 'abc' def func1(self): print 'func1' print self.tempparam def func2(self): print 'func2' print self.tempparam def test(): temp = Temp() try: method = getattr(temp, 'func1') except AttributeError: print 'error' method() temp.tempparam = 'cde' method() return method method = test() method()