`__subclasses__` を使用して Python クラスのサブクラスを検索する方法

Susan Sarandon
リリース: 2024-11-22 16:08:13
オリジナル
302 人が閲覧しました

How to Find Subclasses of a Python Class Using `__subclasses__`?

Python の subclasses メソッドを使用したクラスのサブクラスの検索

指定されたクラスのすべてのサブクラスを検索するのが一般的ですPython オブジェクト指向プログラミングで必要になります。 Python は、__subclasses__ メソッドを通じて洗練されたソリューションを提供します。

Python の新しいスタイルのクラス (つまり、オブジェクト クラスから継承するクラス) には、サブクラスのリストを返す __subclasses__ メソッドがあります。次のクラス階層を考えてみましょう:

class Foo(object):
    pass

class Bar(Foo):
    pass

class Baz(Foo):
    pass

class Bing(Bar):
    pass
ログイン後にコピー

Foo のサブクラスを取得するには、単純に Foo.__subclasses__():

print(Foo.__subclasses__())
# Output: [<class '__main__.Bar'>, <class '__main__.Baz'>]
ログイン後にコピー

Recursive Subclass Retrieval

サブサブクラスを含むすべてのサブクラスを検索したい場合は、再帰が必要です:

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))
# Output: {<class '__main__.Bar'>, <class '__main__.Baz'>, <class '__main__.Bing'>}
ログイン後にコピー

クラス名の文字列の処理

クラス名を文字列として指定してサブクラスを検索すると述べました。 Python クラスはファーストクラスのオブジェクトであるため、文字列表現ではなくクラスを直接使用することをお勧めします。ただし、クラス名文字列がある場合は、globals() 辞書を使用してクラスを取得できます。

name = 'Foo'
cls = globals()[name]
print(cls.__subclasses__())
ログイン後にコピー
別のモジュールで定義されているクラスの場合は、importlib を使用してそのクラスをインポートすることでクラスを取得できます。モジュールと対応する属性へのアクセス:

以上が`__subclasses__` を使用して Python クラスのサブクラスを検索する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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