Python でクラスのサブクラスを名前で検索する
問題:
すべてのクラスを取得するにはどうすればよいですかPython の特定の基本クラスからそのクラスを使用して継承するものname?
解決策:
Python は、指定されたクラスのサブクラスを名前で検索するための洗練されたアプローチを提供します。 __subclasses__ メソッドを使用すると、クラスのサブクラスを直接取得できます。
コードの説明:
サブクラス Bar、Baz、を持つ Foo という名前の基本クラスがあると仮定します。および Bing の使用法を次のコード スニペットで示します。 __subclasses__:
class Foo(object): pass class Bar(Foo): pass class Baz(Foo): pass class Bing(Bar): pass # Get the subclasses of Foo foo_subclasses = Foo.__subclasses__() print("Subclass names:", [cls.__name__ for cls in foo_subclasses]) print("Subclasses themselves:", Foo.__subclasses__()) # Validate that the subclasses inherit from Foo for cls in Foo.__subclasses__(): print("Base class of {}: {}".format(cls, cls.__base__))
出力:
Subclass names: ['Bar', 'Baz'] Subclasses themselves: [<class '__main__.Bar'>, <class '__main__.Baz'>] Base class of <class '__main__.Bar'>: <class '__main__.Foo'> Base class of <class '__main__.Baz'>: <class '__main__.Foo'>
サブサブクラスの検索:
サブサブクラスを検索する必要がある場合は、再帰メソッドを使用できます。 function:
def all_subclasses(cls): return set(cls.__subclasses__()).union( [s for c in cls.__subclasses__() for s in all_subclasses(c)])
注:
__subclasses__ が効果的に機能するには、サブクラスのクラス定義が事前に実行されている必要があることに注意することが重要です。クラス名を表す文字列がある場合は、まず globals()、locals()、または importlib などの手法を使用してクラスを取得できます。
以上がPython でクラスのサブクラスを名前で取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。