Python : Assert that variable is instance method?

quano picture quano · Aug 11, 2009 · Viewed 22.1k times · Source

How can one check if a variable is an instance method or not? I'm using python 2.5.

Something like this:

class Test:
    def method(self):
        pass

assert is_instance_method(Test().method)

Answer

Tom Dunham picture Tom Dunham · Aug 11, 2009

inspect.ismethod is what you want to find out if you definitely have a method, rather than just something you can call.

import inspect

def foo(): pass

class Test(object):
    def method(self): pass

print inspect.ismethod(foo) # False
print inspect.ismethod(Test) # False
print inspect.ismethod(Test.method) # True
print inspect.ismethod(Test().method) # True

print callable(foo) # True
print callable(Test) # True
print callable(Test.method) # True
print callable(Test().method) # True

callable is true if the argument if the argument is a method, a function (including lambdas), an instance with __call__ or a class.

Methods have different properties than functions (like im_class and im_self). So you want

assert inspect.ismethod(Test().method)