如何在Python中找到給定類別的子類別?

DDD
發布: 2024-11-16 01:39:03
原創
887 人瀏覽過

How can I find the subclasses of a given class in Python?

在Python 中尋找類別的子類別

在Python 中,您可以透過給定類別的__subclasses__( ) 方法。此方法適用於新式類,這些類別繼承自「object」類,在 Python 3 中常用。

取得子類別的名稱:

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']
登入後複製

或者,要檢索子類別本身:

Foo.__subclasses__()
# [<class '__main__.Bar'>, <class '__main__.Baz'>]
登入後複製

要確認基底類別關聯:

for cls in Foo.__subclasses__():
    print(cls.__base__)
# <class '__main__.Foo'>
# <class '__main__.Foo'>
登入後複製

遞歸子類檢索:

如果如果您需要捕獲子子類(孫子等),則需要遞歸方法:

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'>}
登入後複製

注意:如果子類別的類別定義尚未執行(例如,其模組為未導入),​​它不會被__subclasses__() 偵測到。

從類別名稱取得子類別:

假設您有類別名稱改為字串。在這種情況下,請按照以下步驟操作:

  1. 使用類別名稱尋找類別物件:

    • 如果在同一模組中:

      cls = globals()[name]
      登入後複製
    • 如果在任何模組中:

      import importlib
      modname, _, clsname = name.rpartition('.')
      mod = importlib.import_module(modname)
      cls = getattr(mod, clsname)
      登入後複製
  2. 使用__subclasses__()

以上是如何在Python中找到給定類別的子類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板