Créer un objet à partir d'une chaine de caractère - Python - Programmation
Marsh Posté le 16-09-2005 à 16:48:13
multani a écrit : Salut,
|
Si possible, je mettrais toutes les classes utlisables comme ça dans un dico pour commencer. Si ce n'est pas possible, il faut savoir ou se trouve définie la classe. Si c'est dans les variables globales du module en cours tu peux faire ça :
globals()["gni"]()
Marsh Posté le 16-09-2005 à 16:55:44
multani a écrit : Salut,
|
T'as le choix entre "exec()" qui exécute une instruction Python complète et "eval()" qui évalue une expression
>>> class MyClass(object): pass |
Marsh Posté le 16-09-2005 à 16:56:32
Kristoph a écrit : Si ce n'est pas possible, il faut savoir ou se trouve définie la classe. Si c'est dans les variables globales du module en cours tu peux faire ça : |
Les classes que je veux instancier ne sont pas dans le même module ...
Kristoph a écrit : Si possible, je mettrais toutes les classes utlisables comme ça dans un dico pour commencer. |
Par contre, ca c'est possible. Je crois voir le truc avec le dico :
|
Par contre, l'instanciation de l'objet dans ce cas ce fait quand ? A la déclaration du dico normalement
Si j'instancie plusieurs objets de la même classe à partir de ce truc, ça va me donner quoi ?
Marsh Posté le 16-09-2005 à 16:58:43
masklinn a écrit : T'as le choix entre "exec()" qui exécute une instruction Python complète et "eval()" qui évalue une expression
|
Ah ouais, pas con
Marsh Posté le 16-09-2005 à 17:08:47
masklinn a écrit : T'as le choix entre "exec()" qui exécute une instruction Python complète et "eval()" qui évalue une expression
|
Beurk, exec et eval
multani a écrit : Les classes que je veux instancier ne sont pas dans le même module ...
|
En Python, une classe est un objet qu'on peut évaluer t qui renvoye un objet instance du premier La construction des instances se fait au moment ou tu execute l'object classe comme tu executerais un appel de fonction :
gni()
En fait, le but ici était de mettre l'objet classe dans le dico pour l'executer plus tard :
class gni: |
Marsh Posté le 16-09-2005 à 17:18:34
Hum, pas con aussi (décidément, spas ma journée aujourd'hui )
Allez, c'est parti pour le dico
Marsh Posté le 16-09-2005 à 17:29:40
Kristoph a écrit : Beurk, exec et eval |
C'est très bien exec et eval quand on en abuse pas
Marsh Posté le 16-09-2005 à 17:36:41
masklinn a écrit : C'est très bien exec et eval quand on en abuse pas |
Les cas d'usage légitimes ne sont pas courants
Marsh Posté le 25-03-2006 à 13:42:49
Bonjour j'ai un peu le meme probleme, que je n'arrive pas à résoudre
J'ai une méthode qui se charge de lire un repertoire et d'ajouter le nom de tous les fichiers python dans une liste sous forme d'une chaine (une classes par fichier).
Mon but est de créer un objet pour chaque fichier récupéré. Avez vous une solution parce que je ne trouve pas de documentation claire pour un débutant (y compris dive into python...)
Merci pour vos réponses
Marsh Posté le 25-03-2006 à 14:41:16
Ben la solution proposé par Kristoph ne convient pas
En gros, tu charges tes fichiers dans ta liste, et si tu fais un truc du genre
Code :
|
?
Marsh Posté le 25-03-2006 à 19:49:37
si merci, désolé j'avais pas compris ca comme ca
j suis un peu teub
Marsh Posté le 28-03-2006 à 10:24:26
Moi en essayant ce code :
Code :
|
ca me met
Code :
|
Marsh Posté le 28-03-2006 à 10:31:50
Normal, tu essaie d'appeller "MaClasse"(), faut faire ça plutôt :
Code :
|
Marsh Posté le 28-03-2006 à 10:34:41
oui mais dans le premier message de niark22 il est question de chaine de caractere dans une liste et apres on instancie
Marsh Posté le 28-03-2006 à 10:39:11
Ben faut passer par un dict alors.
Tu charges le nom des fichiers en tant que clé de ton dictionnaire. En valeur, tu mets une référence vers ta classe, et tu fais des file["MaClasse"]()
Marsh Posté le 28-03-2006 à 11:03:38
multani a écrit : Ben faut passer par un dict alors. |
une reference comment ca?
Marsh Posté le 28-03-2006 à 11:15:12
le probleme, c'est que je ne connais pas MaClasse, j'ai juste le nom du fichier python tout comme niark... je peut donc pas donner de reference? a moins que je sois définitivement idiot
en tout cas merci d'etre aussi patient
Marsh Posté le 28-03-2006 à 11:34:28
Ah, ben après, c'est une autre histoire.
Il faut charger le module qui correspond à ton fichier, puis que charges la classe à partir de ce module, un truc du genre je pense :
Code :
|
Et après, tu as ta classe my_class, que tu peux instancier comme d'habitude : obj = my_class()
Marsh Posté le 01-04-2006 à 02:18:22
ok merci bien, j'ai pas encore essayé mais des lundi j'y fonce
Marsh Posté le 16-09-2005 à 14:17:11
Salut,
j'ai une chaine de caractère qui contient le nom d'un objet que j'aimerais créer. Je pensais me démerder avec getattr pour faire quelque chose avec, mais je trouve pas
J'aimerais faire un truc du genre "my_object = class_name() ", et que my_object soit une instanciation de la classe gni, mais évidemment, ça marche pas trop
Une idée ?