callable(x)
will return true if the object passed can be called in Python, but the function does not exist in Python 3.0, and properly speaking will not distinguish between:
class A(object):
def __call__(self):
return 'Foo'
def B():
return 'Bar'
a = A()
b = B
print type(a), callable(a)
print type(b), callable(b)
You'll get <class 'A'> True
and <type function> True
as output.
isinstance
works perfectly well to determine if something is a function (try isinstance(b, types.FunctionType)
); if you're really interested in knowing if something can be called, you can either use hasattr(b, '__call__')
or just try it.
test_as_func = True
try:
b()
except TypeError:
test_as_func = False
except:
pass
This, of course, won't tell you whether it's callable but throws a TypeError
when it executes, or isn't callable in the first place. That may not matter to you.