Python は Java の Class.forName() メソッドと同等の機能を提供しますか?
Python のリフレクション機能は、Java のリフレクション機能と比較してより広範で柔軟です。この記事では、Python に Java の Class.forName() と同等のメソッドがあるかどうかという問題を取り上げ、文字列引数からクラスを動的にインスタンス化する Python のソリューションを提供します。
Java の Class.forName() メソッドについて考察します。完全修飾クラス名を入力として返し、対応するクラス オブジェクトを返すと、Python でも同様の機能を想像できます。ただし、Python には直接同等のものはありません。
以下に示す get_class() 関数は Class.forName() の動作をエミュレートし、文字列表現からクラス オブジェクトを作成できるようにします。
<code class="python">def get_class(kls): parts = kls.split('.') module = ".".join(parts[:-1]) m = __import__(module) for comp in parts[1:]: m = getattr(m, comp) return m</code>
この関数は、クラス自体であるかのように使用できます。
たとえば、次のことを考慮してください。
<code class="python">D = get_class("datetime.datetime") D # Output: <type 'datetime.datetime'> D.now() # Output: datetime.datetime(2009, 1, 17, 2, 15, 58, 883000) a = D(2010, 4, 22) a # Output: datetime.datetime(2010, 4, 22, 0, 0)</code>
さらに、この記事では、Java と比較した Python のリフレクションの違いを強調しています。同様の機能を実現するための Python 的アプローチの探求を奨励します。
以上がPython でクラスを動的にインスタンス化する方法: 同等の Class.forName() はありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。