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

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

DDD
DDDoriginal
2024-10-29 00:27:02284parcourir

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>

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>

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!

Déclaration:
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