Maison > Java > javaDidacticiel > Comment instancier dynamiquement des classes en Python : existe-t-il un équivalent Class.forName() ?

Comment instancier dynamiquement des classes en Python : existe-t-il un équivalent Class.forName() ?

Mary-Kate Olsen
Libérer: 2024-11-03 11:32:03
original
304 Les gens l'ont consulté

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

Python offre-t-il un équivalent à la méthode Class.forName() de Java ?

Les capacités de réflexion de Python sont plus étendues et plus flexibles que celles de Java. Cet article aborde la question de savoir si Python a un équivalent à Class.forName() de Java et fournit une solution pythonique pour instancier dynamiquement des classes à partir d'arguments de chaîne.

Réflexion sur la méthode Class.forName() de Java, qui prend un nom de classe complet en entrée et renvoie l'objet de classe correspondant, on peut imaginer une fonctionnalité similaire en Python. Cependant, Python n'a pas d'équivalent direct.

La fonction get_class() présentée ci-dessous émule le comportement de Class.forName(), permettant la création d'objets de classe à partir de représentations sous forme de chaîne :

<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

Cette fonction peut être utilisée comme s'il s'agissait de la classe elle-même.

Par exemple, considérez ce qui suit :

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

De plus, l'article met en évidence les différences dans la réflexion de Python par rapport à celle de Java , et encourage l'exploration d'approches Pythoniques pour obtenir des fonctionnalités 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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal