Is this enough?
import types class Test(object): @staticmethod def foo(): print 'foo' def bar(self): print 'bar'
In conjunction with:
>>>(isinstance(getattr(Test, 'foo'), types.FunctionType), isinstance(getattr(Test, 'bar'), types.FunctionType)) True, False
You can also use the inspect module:
>>> inspect.isfunction(Test.foo) True >>> inspect.isfunction(Test.bar) False
With a little extra work, you can even distinguish class methods from instance methods and static methods:
import inspect def get_type(cls, attr): try: return [a.kind for a in inspect.classify_class_attrs(cls) if a.name == attr][0] except IndexError: return None class Test(object): @classmethod def foo(cls): print 'foo' def bar(self): print 'bar' @staticmethod def baz(): print 'baz'
You can use it like:
>>> get_type(Test, 'foo') 'class method' >>> get_type(Test, 'bar') 'method' >>> get_type(Test, 'baz') 'static method' >>> get_type(Test, 'nonexistant') None
source share