ホームページ > バックエンド開発 > Python チュートリアル > Python でクラスのすべてのサブクラスを検索するにはどうすればよいですか?

Python でクラスのすべてのサブクラスを検索するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-15 06:05:02
オリジナル
529 人が閲覧しました

How Can I Find All Subclasses of a Class in Python?

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__() によって検出されません。

クラス名文字列を使用したサブクラスの検索:

クラス名のみが文字列として使用可能な場合、次の手順が必要です:

  1. クラス名を使用してクラスを検索します。
  2. __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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート