Heim  >  Artikel  >  Java  >  So instanziieren Sie Klassen dynamisch in Python: Gibt es ein Class.forName()-Äquivalent?

So instanziieren Sie Klassen dynamisch in Python: Gibt es ein Class.forName()-Äquivalent?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-03 11:32:03248Durchsuche

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

Bietet Python ein Äquivalent zur Class.forName()-Methode von Java?

Die Reflexionsfähigkeiten von Python sind im Vergleich zu denen von Java umfangreicher und flexibler. Dieser Artikel befasst sich mit der Frage, ob Python ein Äquivalent zu Javas Class.forName() hat, und bietet eine Pythonic-Lösung für die dynamische Instanziierung von Klassen aus String-Argumenten.

Nachdenken über die Class.forName()-Methode von Java, die dauert Wenn man einen vollständig qualifizierten Klassennamen als Eingabe verwendet und das entsprechende Klassenobjekt zurückgibt, kann man sich eine ähnliche Funktionalität in Python vorstellen. Allerdings gibt es in Python kein direktes Äquivalent.

Die unten dargestellte Funktion get_class() emuliert das Verhalten von Class.forName() und ermöglicht die Erstellung von Klassenobjekten aus Zeichenfolgendarstellungen:

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

Diese Funktion kann so verwendet werden, als wäre sie die Klasse selbst.

Bedenken Sie beispielsweise Folgendes:

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

Darüber hinaus hebt der Artikel die Unterschiede in der Reflexion von Python im Vergleich zu Java hervor und fördert die Erforschung pythonischer Ansätze, um eine ähnliche Funktionalität zu erreichen.

Das obige ist der detaillierte Inhalt vonSo instanziieren Sie Klassen dynamisch in Python: Gibt es ein Class.forName()-Äquivalent?. 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