"ast" <nom...@invalid.com> 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 information. 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. -- https://mail.python.org/mailman/listinfo/python-list