クラスメソッドの抽出
havana から「クラスメソッドだけを引っ張り出す方法ナイ?」って話を振られて、今日はそれで遊んでた。
が、どーも「これだ!」と思えるものが出てこない。
im_self を参照すればいいんじゃないでしょうか。
def get_class_method_list(klass): return [name for name in dir(klass) if is_class_method(klass, name)] def is_class_method(klass, name): attr = getattr(klass, name) return bool(callable(attr) and hasattr(attr, 'im_self') and attr.im_self == klass) if __name__ == '__main__': class hoge(object): @classmethod def cm_foo(self): pass def im_bar(self): pass print "\n".join(get_class_method_list(hoge))
属性値が callable で im_self を持っていて、且つ im_self がクラスと一致するならクラスメソッド。分かってみれば、割合単純な話。
native なモジュールや built-in なクラスでうまくいくかどうかは知らない。