How I can get a list with all superclasses of given class in Python?
I know, there is a __subclasses__()
method in inspent
module for getting all subclasses, but I don't know any similar method for getting superclasses.
How I can get a list with all superclasses of given class in Python?
I know, there is a __subclasses__()
method in inspent
module for getting all subclasses, but I don't know any similar method for getting superclasses.
Here's 2 methods which work both for python 2 and 3.
Argument can be an instance or a classe.
import inspect
# Works both for python 2 and 3
def getClassName(anObject):
if (inspect.isclass(anObject) == False): anObject = anObject.__class__
className = anObject.__name__
return className
# Works both for python 2 and 3
def getSuperClassNames(anObject):
superClassNames = []
if (inspect.isclass(anObject) == False): anObject = anObject.__class__
classes = inspect.getmro(anObject)
for cl in classes:
s = str(cl).replace('\'', '').replace('>', '')
if ("__main__." in s): superClassNames.append(s.split('.', 1)[1])
clName = str(anObject.__name__)
if (clName in superClassNames): superClassNames.remove(clName)
if (len(superClassNames) == 0): superClassNames = None
return superClassNames
Use the
__mro__
attribute:This is a special attribute populated at class instantiation time: