Home >Backend Development >Python Tutorial >How Can I Find All Subclasses of a Python Class?
Accessing Subclasses of a Class
In Python, finding all subclasses of a given class can be achieved through the __subclasses__ method. This method is available for new-style classes (those inheriting from object in Python 3 or subclassed from a new-style class).
For example, consider the following code:
class Foo(object): pass class Bar(Foo): pass class Baz(Foo): pass class Bing(Bar): pass
To retrieve the subclasses of Foo, we can use the following code:
print([cls.__name__ for cls in Foo.__subclasses__()])
This will print the names of the subclasses:
['Bar', 'Baz']
We can also obtain the subclasses themselves using __subclasses__():
print(Foo.__subclasses__())
This will print the following list of subclasses:
[<class '__main__.Bar'>, <class '__main__.Baz'>]
To confirm that these subclasses indeed have Foo as their base class, we can use the following code:
for cls in Foo.__subclasses__(): print(cls.__base__)
This will print the following:
<class '__main__.Foo'> <class '__main__.Foo'>
However, it should be noted that if the class definition of a subclass has not yet been executed, it will not be found by __subclasses__. To account for this, recursion can be employed:
def all_subclasses(cls): return set(cls.__subclasses__()).union( [s for c in cls.__subclasses__() for s in all_subclasses(c)]) print(all_subclasses(Foo))
This will print:
{<class '__main__.Bar'>, <class '__main__.Baz'>, <class '__main__.Bing'>}
The above is the detailed content of How Can I Find All Subclasses of a Python Class?. For more information, please follow other related articles on the PHP Chinese website!