class Upper(object):
def __init__(self):
pass
class Lower(Upper):
def __init__(self):
Upper.__init__(self)
self.type = type(self)
issubclass(Lower, Upper)
True
class Upper(object):
def __init__(self):
pass
class Lower(Upper):
def __init__(self):
Upper.__init__(self)
self.type = type(self)
self.issub = issubclass(self.type, Upper)
u = Upper()
l = Lower()
print(l.type)
print(l.issub)
<class '__main__.Lower'> True
class MoreLower(Lower):
def __init__(self):
Lower.__init__(self)
self.type = type(self)
self.issub = issubclass(self.type, Lower)
self.issubsub = issubclass(self.type, Upper)
m = MoreLower()
print(m.type)
print(m.issub)
print(m.issubsub)
<class '__main__.MoreLower'> True True
MoreLower.__base__
__main__.Lower
Upper.__base__
object
class Foo(object):
pass
class Bar(Foo):
pass
class Baz(Foo):
pass
class Bing(Bar):
pass
#Here are the names of the subclasses:
Foo.__subclasses__()
[__main__.Bar, __main__.Baz]
# Confirmation that the subclasses do indeed list Foo as their base:
for cls in Foo.__subclasses__():
print(cls.__base__)
<class '__main__.Foo'> <class '__main__.Foo'>
# Note if you want subsubclasses, you'll have to recurse:
def all_subclasses(cls):
return cls.__subclasses__() + [g for s in cls.__subclasses__()
for g in all_subclasses(s)]
print(all_subclasses(Foo))
[<class '__main__.Bar'>, <class '__main__.Baz'>, <class '__main__.Bing'>]