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

Patricia Arquette
リリース: 2024-11-17 09:50:03
オリジナル
152 人が閲覧しました

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

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