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

Python で特定のクラスのサブクラスを見つけるにはどうすればよいですか?

DDD
リリース: 2024-11-16 01:39:03
オリジナル
956 人が閲覧しました

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

Python でのクラスのサブクラスの検索

Python では、__subclasses__( ) メソッド。このメソッドは、「オブジェクト」クラスから継承され、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'>
ログイン後にコピー

再帰的サブクラス取得:

Ifサブサブクラス (孫など) をキャプチャする必要がある場合は、再帰的アプローチが必要です:

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 中国語 Web サイトの他の関連記事を参照してください。

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