Heim  >  Artikel  >  Java  >  Wie erreicht man das Äquivalent von Javas Class.forName() in Python?

Wie erreicht man das Äquivalent von Javas Class.forName() in Python?

DDD
DDDOriginal
2024-10-29 00:27:02199Durchsuche

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

Pythons flexible Reflexion: Äquivalent zu Javas Class.forName()

Die Reflexionsfähigkeiten von Python sind im Vergleich zu denen von Java deutlich vielseitiger und benutzerfreundlicher Class.forName(). Auch wenn es möglicherweise kein genaues direktes Äquivalent gibt, können Sie durch das Verständnis der Reflexionsmechanismen von Python eine ähnliche Funktionalität erreichen.

Pythons Reflexionsansatz

Pythons Reflexion nutzt mehrere wesentliche Techniken:

  1. __import__: Importiert ein Modul mit seinem Namen als String.
  2. getattr: Ruft ein Attribut ab (Modul, Klasse, Funktion, usw.) von einem angegebenen Objekt.
  3. Schleife: Ruft iterativ Verweise auf verschachtelte Module und Klassen innerhalb eines vollständig qualifizierten Namens ab.

Benutzerdefinierte Funktion : get_class

Um eine äquivalente Funktionalität zu Class.forName() bereitzustellen, kann die folgende Python-Funktion verwendet werden:

<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>

Verwendungsbeispiel

Mit dieser Funktion können Sie eine Klassenreferenz aus ihrem vollständig qualifizierten Namen erhalten:

<code class="python">>>> D = get_class("datetime.datetime")
>>> D
<type 'datetime.datetime'>
>>> D.now()
datetime.datetime(2009, 1, 17, 2, 15, 58, 883000)</code>

So funktioniert es

  • Der Klassenname lautet in seine Bestandteile aufteilen (Modulname und Klassenname).
  • Das Modul wird mit __import__ importiert.
  • getattr wird wiederholt verwendet, um verschachtelte Module zu durchlaufen und die endgültige Klassenreferenz zu erhalten.

Fazit

Pythons Reflexion bietet eine leistungsstarke und flexible Möglichkeit, Klassen und Objekte zu manipulieren. Obwohl es sich von Javas Class.forName() unterscheidet, bietet es einen anpassungsfähigeren und funktionsreicheren Ansatz zum Erreichen ähnlicher Ziele.

Das obige ist der detaillierte Inhalt vonWie erreicht man das Äquivalent von Javas Class.forName() in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn