Finding in which class an object's method comes from

dieter dieter at
Fri Feb 5 02:52:04 EST 2016

"ast" <nomail at> writes:
> Suppose we have:
> ClassC inherit from ClassB
> ClassB inherit from ClassA
> ClassA inherit from object
> Let's build an object:
> obj = ClassC()
> Let's invoke an obj method
> obj.funct()
> funct is first looked in ClassC, then if not found
> on ClassB, then ClassA then object

In Python 2, I am using the following function to find out such

from inspect import getmro

def definedBy(name, class_):
  '''return *class_* base class defining *name*.

  *class_* may (now) also be an object. In this case, its class is used.
  if not hasattr(class_, '__bases__'): class_ = class_.__class__
  for cl in getmro(class_):
    if hasattr(cl,'__dict__'):
      if cl.__dict__.has_key(name): return cl
    elif hasattr(cl, name): return cl
  return None
(Unlike other approaches reported in this thread)
it not only works for methods but also for other attributes.

I am using this for (interactive) debugging purposes:
usually, I work with Zope/Plone which is a huge software stack
and their it is handy to be able to quickly find out where something
is defined in the code.

More information about the Python-list mailing list