Python でデコレートされているメソッドを取得する方法
Python でデコレーターでデコレートされている関数/メソッドを全て取得したい。
class Sample(object): @decorator def foo(self): pass @decorator def bar(self): pass def baz(self): pass
この場合だと、foo(), bar() を取得したい。
inspect.getmembers() を使う。
for func_name, func in inspect.getmembers(instance, inspect.ismethod): print(func)
instance には Sample クラスのインスタンスが入っている場合、func に Sample のメソッドが格納される。
このままでは baz() まで取得される。
そのためデコレーターの実装に少し工夫する。
def decorator(): def _decorator(f): f.__sample_event = True @wraps(f) def __decorator(func, message, **_kwargs): return f(func, message, **_kwargs) return __decorator return _decorator instance = Sample() for func_name, func in inspect.getmembers(instance, inspect.ismethod): if getattr(func, '__sample_event', False): print(func)
ちょっとトリッキーだけど、これでメソッド一覧を取得できる。