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)
クラスが見つかったら、その __subclasses__() メソッドを使用して、必要なサブクラスのリストを取得できます。
以上がPython でクラスのすべてのサブクラスを検索するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。