在Python 中尋找某個類別的所有子類別
要擷取所有從Python 中從Python 繼承的所有類別,請使用__subclasses__()方法。此方法可用於擴展物件類別的新式類別(Python 3 中的預設值)。它的運作原理如下:
class Foo(object): pass class Bar(Foo): pass class Baz(Foo): pass class Bing(Bar): pass print([cls.__name__ for cls in Foo.__subclasses__()]) # ['Bar', 'Baz'] print(Foo.__subclasses__()) # [<class '__main__.Bar'>, <class '__main__.Baz'>]
要包含子子類,可以使用遞歸:
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)) # {<class '__main__.Bar'>, <class '__main__.Baz'>, <class '__main__.Bing'>}
注意:尚未定義的子類(例如,由於未導入的模組)將不會被__subclasses__() 偵測到。
使用類別名稱字串定位子類別:
當只有類別名稱作為字串可用時,需要執行以下步驟:
從名稱字串中尋找類別:
從名稱字串中尋找類別的方法取決於其預期位置:
如果需要在同一模組中:
cls = globals()[name]
如果需要在本地命名空間中:
cls = locals()[name]
import importlib modname, _, clsname = name.rpartition('.') mod = importlib.import_module(modname) cls = getattr(mod, clsname)
以上是如何在Python中找到一個類別的所有子類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!