pythonpython-2.6python-datamodel

Get class that defined method


How can I get the class that defined a method in Python?

I'd want the following example to print "__main__.FooClass":

class FooClass:
    def foo_method(self):
        print "foo"

class BarClass(FooClass):
    pass

bar = BarClass()
print get_class_that_defined_method(bar.foo_method)

Solution

  • import inspect
    
    def get_class_that_defined_method(meth):
        for cls in inspect.getmro(meth.im_class):
            if meth.__name__ in cls.__dict__: 
                return cls
        return None