在 Python中按名稱查找類的子類
問題:
如何檢索所有類
解決方案:
Python 提供了一種優雅的方法,可以透過名稱尋找指定類別的子類別。透過 __subclasses__ 方法,你可以直接檢索一個類別的子類別。
程式碼說明:
假設你有一個名為 Foo 的基類,其子類為 Bar、Baz、和 Bing,以下程式碼片段說明了 __subclasses__的用法:
class Foo(object): pass class Bar(Foo): pass class Baz(Foo): pass class Bing(Bar): pass # Get the subclasses of Foo foo_subclasses = Foo.__subclasses__() print("Subclass names:", [cls.__name__ for cls in foo_subclasses]) print("Subclasses themselves:", Foo.__subclasses__()) # Validate that the subclasses inherit from Foo for cls in Foo.__subclasses__(): print("Base class of {}: {}".format(cls, cls.__base__))
輸出:
Subclass names: ['Bar', 'Baz'] Subclasses themselves: [<class '__main__.Bar'>, <class '__main__.Baz'>] Base class of <class '__main__.Bar'>: <class '__main__.Foo'> Base class of <class '__main__.Baz'>: <class '__main__.Foo'>
找出子子類別:
如果需要要查找子子類,可以使用遞歸函數:
def all_subclasses(cls): return set(cls.__subclasses__()).union( [s for c in cls.__subclasses__() for s in all_subclasses(c)])
注意:
需要注意的是,為了使__subclasses__ 有效運作,子類別的類別定義之前一定已經執行過。如果您有一個表示類別名稱的字串,您可以先使用 globals()、locals() 或 importlib 等技術來擷取該類別。
以上是如何在 Python 中按名稱檢索類別的子類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!