ホームページ  >  記事  >  Java  >  Python でクラスを動的にインスタンス化する方法: 同等の Class.forName() はありますか?

Python でクラスを動的にインスタンス化する方法: 同等の Class.forName() はありますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-03 11:32:03274ブラウズ

How to Dynamically Instantiate Classes in Python: Is There a Class.forName() Equivalent?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。