Maison > Java > javaDidacticiel > le corps du texte

Comment obtenir l'équivalent de Class.forName() de Java en Python ?

DDD
Libérer: 2024-10-29 00:27:02
original
282 Les gens l'ont consulté

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

Réflexion flexible de Python : équivalente à Class.forName() de Java

Les capacités de réflexion de Python sont nettement plus polyvalentes et conviviales que celles de Java Classe.forName(). Bien qu'il n'y ait pas d'équivalent direct exact, comprendre les mécanismes de réflexion de Python vous permet d'obtenir des fonctionnalités similaires.

L'approche de réflexion de Python

La réflexion de Python utilise plusieurs techniques essentielles :

  1. __import__ : Importe un module en fonction de son nom sous forme de chaîne.
  2. getattr : Récupère un attribut (module, classe, fonction, etc.) à partir d'un objet spécifié.
  3. Bouclage : Obtient de manière itérative des références à des modules et des classes imbriqués dans un nom complet.

Fonction personnalisée : get_class

Pour fournir une fonctionnalité équivalente à Class.forName(), la fonction Python suivante peut être utilisée :

<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>
Copier après la connexion

Exemple d'utilisation

Cette fonction permet d'obtenir une référence de classe à partir de son nom complet :

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

Comment ça marche

  • Le nom de la classe est divisé en ses composants (nom du module et nom de la classe).
  • Le module est importé à l'aide de __import__.
  • getattr est utilisé à plusieurs reprises pour parcourir les modules imbriqués et obtenir la référence de classe finale.

Conclusion

La réflexion de Python offre un moyen puissant et flexible de manipuler des classes et des objets. Bien qu'il diffère de Class.forName() de Java, il offre une approche plus adaptable et plus riche en fonctionnalités pour atteindre des objectifs similaires.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal