クラスメソッドの抽出 #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 が標準的だよね。確か。