How to get the parents of a Python class? How to get the parents of a Python class? python python

How to get the parents of a Python class?


Use the following attribute:

cls.__bases__

From the docs:

The tuple of base classes of a class object.

Example:

>>> str.__bases__(<type 'basestring'>,)

Another example:

>>> class A(object):...   pass... >>> class B(object):...   pass... >>> class C(A, B):...   pass... >>> C.__bases__(<class '__main__.A'>, <class '__main__.B'>)


If you want all the ancestors rather than just the immediate ones, use inspect.getmro:

import inspectprint inspect.getmro(cls)

Usefully, this gives you all ancestor classes in the "method resolution order" -- i.e. the order in which the ancestors will be checked when resolving a method (or, actually, any other attribute -- methods and other attributes live in the same namespace in Python, after all;-).


The fastest way to get all parents, and in order, is to just use the __mro__ built-in.

For instance, repr(YOUR_CLASS.__mro__).

The following:

import getpassgetpass.GetPassWarning.__mro__

...outputs, in order:

(<class 'getpass.GetPassWarning'>, <type 'exceptions.UserWarning'>, <type 'exceptions.Warning'>, <type 'exceptions.Exception'>, <type 'exceptions.BaseException'>, <type 'object'>)

There you have it. The "best" answer may have more votes but this is so much simpler than some convoluted for loop, looking into __bases__ one class at a time, not to mention when a class extends two or more parent classes. Importing and using inspect just clouds the scope unnecessarily.


matomo