クラスメソッドの抽出 #2
okuji さん曰く
素直にinspect.classify_class_attrsを使ってはどうでしょうか。
あー、標準にそんなモジュールが。というわけでコレを使えばこうなりますね。
import inspect def get_class_methods(klass): return [attr[0] for attr in inspect.classify_class_attrs(klass) if attr[1] == 'class method']
あと、こういう他にこういう方法も
def get_class_methods(klass): return [name for name in dir(klass) if is_class_method(klass, name)] def is_class_method(klass, name): if name in klass.__dict__: attr = klass.__dict__[name] else: attr = getattr(klass, name) return isinstance(attr, classmethod)
あれ、そういや、クラスをあらわす変数名は cls と klass のどっちが多いんだろ。klass だと思っていたら inspect.py では cls だったからちょっと面食らった。まぁ、どうでもいいといえばどうでもいいけど。
Ruby では klass が標準的だよね。確か。