Python の動的リフレクション: Java の Class.forName() に相当
概要:
Java では、Class.forName() メソッドは完全修飾名に基づいてクラスを動的にロードします。 Python も同様の機能を提供しますが、動的な性質を利用して柔軟性が高くなります。
Python のリフレクション:
Python のリフレクションを使用すると、実行時にクラスとオブジェクトのイントロスペクションと操作が可能になります。実行時にコードを調べて変更するための強力なツールセットを提供します。
動的クラスの読み込み:
Class.forName() と同様に、クラスを動的にロードできます。いくつかのアプローチを使用した Python:
1. getattr() の使用:
getattr() を使用すると、文字列として保存された名前に基づいてクラス属性にアクセスできます。例:
<code class="python">module = __import__("module_name") class_name = "Class" cls = getattr(module, class_name)</code>
2. __import__() 関数の使用:
この関数はモジュールをインポートし、トップレベルのモジュール オブジェクトを返します。その後、ドット表記を使用してモジュール内のクラスにアクセスできます:
<code class="python">module = __import__("module_name.submodule.class_name", fromlist=["*"]) cls = module.class_name</code>
使用例:
次の Python コードは、getattr() を使用した動的クラスの読み込みを示しています。 🎜>
<code class="python">def get_class(class_name): parts = class_name.split('.') module = ".".join(parts[:-1]) m = __import__(module) for part in parts[1:]: m = getattr(m, part) return m # Usage my_class = get_class("my_package.my_module.MyClass") instance = my_class()</code>
結論:
Python の動的リフレクションは、実行時にクラスをロードおよび操作するための柔軟なメカニズムを提供します。 Java の Class.forName() とは、動的クラス操作に対するより汎用性の高いアプローチという点で異なります。以上がJava の Class.forName() と同様に、Python はどのようにして動的なクラスの読み込みを実現するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。