ホームページ  >  記事  >  Java  >  Java の Class.forName() と同等の機能を Python で実現するにはどうすればよいですか?

Java の Class.forName() と同等の機能を Python で実現するにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-29 00:27:02199ブラウズ

How to Achieve the Equivalent of Java's Class.forName() in Python?

Python の柔軟なリフレクション: Java の Class.forName() と同等

Python のリフレクション機能は、Java のリフレクション機能と比較して、はるかに多用途で使いやすいです。 Class.forName()。厳密に直接同等のものはないかもしれませんが、Python のリフレクション メカニズムを理解すると、同様の機能を実現できます。

Python のリフレクション アプローチ

Python のリフレクションでは、いくつかの重要なテクニックが利用されます。

  1. __import__: 文字列として名前が指定されたモジュールをインポートします。
  2. getattr: 属性 (モジュール、クラス、関数、
  3. ループ: 完全修飾名内のネストされたモジュールおよびクラスへの参照を反復的に取得します。

カスタム関数: get_class

Class.forName() と同等の機能を提供するには、次の Python 関数を利用できます:

<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
<type 'datetime.datetime'>
>>> D.now()
datetime.datetime(2009, 1, 17, 2, 15, 58, 883000)</code>

仕組み

  • クラス名は次のとおりです。コンポーネント部分 (モジュール名とクラス名) に分割されます。
  • モジュールは __import__ を使用してインポートされます。
  • getattr は、ネストされたモジュールを横断して最終的なクラス参照を取得するために繰り返し使用されます。

結論

Python のリフレクションは、クラスとオブジェクトを操作する強力かつ柔軟な方法を提供します。 Java の Class.forName() とは異なりますが、同様の目標を達成するための、より適応性が高く機能が豊富なアプローチを提供します。

以上がJava の Class.forName() と同等の機能を Python で実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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