存取類別的子類別
在Python中,尋找給定類別的所有子類別可以透過__subclasses__方法來實現。此方法適用於新式類別(從 Python 3 中的物件繼承或從新式類別繼承的類別)。
例如,考慮以下程式碼:
class Foo(object): pass class Bar(Foo): pass class Baz(Foo): pass class Bing(Bar): pass
要擷取Foo 的子類,我們可以使用以下程式碼:
print([cls.__name__ for cls in Foo.__subclasses__()])
這將會列印Foo 的子類的名稱子類別:
['Bar', 'Baz']
我們也可以使用__subclasses__()取得子類別本身:
print(Foo.__subclasses__())
這將列印以下子類別清單:
[<class '__main__.Bar'>, <class '__main__.Baz'>]
為了確認這些子類別確實以 Foo作為基底類,我們可以使用以下內容code:
for cls in Foo.__subclasses__(): print(cls.__base__)
這會列印以下內容:
<class '__main__.Foo'> <class '__main__.Foo'>
但是需要注意的是,如果子類別的類別定義還沒有被執行,則不會由__subclasses__ 發現。為了解決這個問題,可以採用遞歸:
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'>}
以上是如何找到Python類別的所有子類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!