oop – How to get the parents of a Python class?

oop – 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 inspect
print 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;-).

oop – How to get the parents of a Python class?

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 getpass
getpass.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.

Leave a Reply

Your email address will not be published. Required fields are marked *