Maison  >  Article  >  Java  >  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
Mary-Kate Olsenoriginal
2024-11-03 11:32:03262parcourir

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>

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>

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!

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