首頁  >  文章  >  後端開發  >  如何在 Python 中按名稱檢索類別的子類別?

如何在 Python 中按名稱檢索類別的子類別?

Linda Hamilton
Linda Hamilton原創
2024-11-18 09:10:02632瀏覽

How to Retrieve Subclasses of a Class by Name in Python?

在 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn