Home >Backend Development >Python Tutorial >How can I find the subclasses of a given class in Python?
Finding Subclasses of a Class in Python
In Python, you can determine the subclasses of a given class through its __subclasses__() method. This method is available to new-style classes, which are inherited from the "object" class and are commonly used in Python 3.
To obtain the names of the subclasses:
class Foo(object): pass class Bar(Foo): pass class Baz(Foo): pass class Bing(Bar): pass [cls.__name__ for cls in Foo.__subclasses__()] # ['Bar', 'Baz']
Alternatively, to retrieve the subclasses themselves:
Foo.__subclasses__() # [<class '__main__.Bar'>, <class '__main__.Baz'>]
To confirm the base class association:
for cls in Foo.__subclasses__(): print(cls.__base__) # <class '__main__.Foo'> # <class '__main__.Foo'>
Recursive Subclass Retrieval:
If you need to capture subsubclasses (grandchildren, etc.), a recursive approach is necessary:
def all_subclasses(cls): return set(cls.__subclasses__()).union( [s for c in cls.__subclasses__() for s in all_subclasses(c)]) all_subclasses(Foo) # {<class '__main__.Bar'>, <class '__main__.Baz'>, <class '__main__.Bing'>}
Note: If a subclass's class definition has not been executed (e.g., its module is not imported), it won't be detectable by __subclasses__().
Obtaining Subclasses from a Class Name:
Suppose you have the class name as a string instead. In that case, follow these steps:
Find the class object using the class name:
If in the same module:
cls = globals()[name]
If in any module:
import importlib modname, _, clsname = name.rpartition('.') mod = importlib.import_module(modname) cls = getattr(mod, clsname)
The above is the detailed content of How can I find the subclasses of a given class in Python?. For more information, please follow other related articles on the PHP Chinese website!