OVH Cloud OVH Cloud

Création dynamique d'objet

2 réponses
Avatar
janemba
Bonjour,

J'aimerais savoir comment puis-je instancier dynamiquement des
objets en utilisant seulement une chaine de caractéres (nom de
l'objet et du fichier .py).

Le nom du fichier est le même que celui de l'objet donc dans un
premier temps je dois importer le module et ensuite instancier
l'objet dans le module. Tout ce dont je dispose est la chaine de
caractéres du nom de l'objet et du fichier. Cependant, j'aimerais
aussi instancier l'objet dynamiquement en appelant sa méthode
"__init__".

J'ai essayé plusieurs choses mais aucune ne m'as vraiment satisfait
car je n'avais qu'une partie de la solution.

Cordialement,

2 réponses

Avatar
Amaury Forgeot d'Arc
Bonjour,

Bonjour,

J'aimerais savoir comment puis-je instancier dynamiquement des
objets en utilisant seulement une chaine de caractéres (nom de
l'objet et du fichier .py).

Le nom du fichier est le même que celui de l'objet donc dans un
premier temps je dois importer le module et ensuite instancier
l'objet dans le module. Tout ce dont je dispose est la chaine de
caractéres du nom de l'objet et du fichier. Cependant, j'aimerais
aussi instancier l'objet dynamiquement en appelant sa méthode
"__init__".

J'ai essayé plusieurs choses mais aucune ne m'as vraiment satisfait
car je n'avais qu'une partie de la solution.


Pour instancier un objet (à partir de sa classe), il suffit de l'appeler
comme une fonction! Un peu comme l'opérateur 'new' du Java ou C++.

Si j'ai bien compris, il te faut du code qui ressemble à ceci:

nomDuModule = "module" # le nom du .py
nomDeLaClasse = "module" # ici, c'est le même nom

# Importe le module
module = __import__(nomDuModule)
# Trouve la classe dans le module
classe = getattr(module, nomDeLaClasse)
# instancie l'objet et appelle son __init__
objet = classe()

En python, un module et une classe sont aussi des objets que l'on peut
mettre dans des variables. Et c'est pour cela qu'on l'aime.

--
Amaury Forgeot d'Arc

Avatar
janemba
On Tue, 20 Feb 2007 22:58:43 +0100, Amaury Forgeot d'Arc wrote:

Bonjour,

Bonjour,

J'aimerais savoir comment puis-je instancier dynamiquement des
objets en utilisant seulement une chaine de caractéres (nom de
l'objet et du fichier .py).

Le nom du fichier est le même que celui de l'objet donc dans un
premier temps je dois importer le module et ensuite instancier
l'objet dans le module. Tout ce dont je dispose est la chaine de
caractéres du nom de l'objet et du fichier. Cependant, j'aimerais
aussi instancier l'objet dynamiquement en appelant sa méthode
"__init__".

J'ai essayé plusieurs choses mais aucune ne m'as vraiment satisfait
car je n'avais qu'une partie de la solution.


Pour instancier un objet (à partir de sa classe), il suffit de l'appeler
comme une fonction! Un peu comme l'opérateur 'new' du Java ou C++.

Si j'ai bien compris, il te faut du code qui ressemble à ceci:

nomDuModule = "module" # le nom du .py
nomDeLaClasse = "module" # ici, c'est le même nom

# Importe le module
module = __import__(nomDuModule)
# Trouve la classe dans le module
classe = getattr(module, nomDeLaClasse)
# instancie l'objet et appelle son __init__
objet = classe()

En python, un module et une classe sont aussi des objets que l'on peut
mettre dans des variables. Et c'est pour cela qu'on l'aime.


Merci beaucoup, effectivement ça fait du bien ;)