クラスのサブクラスへのアクセス
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 サイトの他の関連記事を参照してください。