ホームページ  >  記事  >  バックエンド開発  >  Python クラスのすべてのサブクラスを見つけるにはどうすればよいですか?

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-17 09:50:03153ブラウズ

How Can I Find All Subclasses of a Python Class?

クラスのサブクラスへのアクセス

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 のサブクラスの名前が出力されます。 subclasses:

['Bar', 'Baz']

__subclasses__():

print(Foo.__subclasses__())

を使用してサブクラス自体を取得することもできます。これにより、次のサブクラスのリストが出力されます:

[<class '__main__.Bar'>, <class '__main__.Baz'>]

これらのサブクラスが実際に基底クラスとして Foo を持っていることを確認するには、次のメソッドを使用できます。コード:

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。