Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1093 connectés 

  FORUM HardWare.fr
  Programmation
  Python

  Créer un objet à partir d'une chaine de caractère

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Créer un objet à partir d'une chaine de caractère

n°1201085
multani
Dépressionnisé
Posté le 16-09-2005 à 14:17:11  profilanswer
 

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 :/
 

Code :
  1. class gni:
  2. def __init__(self):
  3.  print "gni"
  4. def load(self, id):
  5.  [...]
  6. class_name = "gni"


 
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 [:petrus75]
 
 
Une idée ? [:dawa]

mood
Publicité
Posté le 16-09-2005 à 14:17:11  profilanswer
 

n°1201220
Kristoph
Posté le 16-09-2005 à 16:48:13  profilanswer
 

multani a écrit :

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 :/
 

Code :
  1. class gni:
  2. def __init__(self):
  3.  print "gni"
  4. def load(self, id):
  5.  [...]
  6. class_name = "gni"


 
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 [:petrus75]
 
 
Une idée ? [:dawa]


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"]()

n°1201226
masklinn
í dag viðrar vel til loftárása
Posté le 16-09-2005 à 16:55:44  profilanswer
 

multani a écrit :

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 :/
 

Code :
  1. class gni:
  2. def __init__(self):
  3.  print "gni"
  4. def load(self, id):
  5.  [...]
  6. class_name = "gni"


 
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 [:petrus75]
 
 
Une idée ? [:dawa]


T'as le choix entre "exec()" qui exécute une instruction Python complète et "eval()" qui évalue une expression :o

>>> class MyClass(object): pass
>>> exec("a = MyClass()" )
>>> a
<__main__.MyClass object at 0x00E31B90>
>>> b = eval("MyClass()" )
>>> b
<__main__.MyClass object at 0x00E31B90>


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1201227
multani
Dépressionnisé
Posté le 16-09-2005 à 16:56:32  profilanswer
 

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 :
globals()["gni"]()


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 :) :


class gni:
    def __init__(self):
        print "gni"
 
    def load(self, id):
         [...]
 
dico = dict()
dico["gni"] = gni()
 
class_name = "gni"
 
my_object = dico[class_name]


 
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 ?

n°1201232
multani
Dépressionnisé
Posté le 16-09-2005 à 16:58:43  profilanswer
 

masklinn a écrit :

T'as le choix entre "exec()" qui exécute une instruction Python complète et "eval()" qui évalue une expression :o

>>> class MyClass(object): pass
>>> exec("a = MyClass()" )
>>> a
<__main__.MyClass object at 0x00E31B90>
>>> b = eval("MyClass()" )
>>> b
<__main__.MyClass object at 0x00E31B90>



 
Ah ouais, pas con [:petrus75]

n°1201255
Kristoph
Posté le 16-09-2005 à 17:08:47  profilanswer
 

masklinn a écrit :

T'as le choix entre "exec()" qui exécute une instruction Python complète et "eval()" qui évalue une expression :o

>>> class MyClass(object): pass
>>> exec("a = MyClass()" )
>>> a
<__main__.MyClass object at 0x00E31B90>
>>> b = eval("MyClass()" )
>>> b
<__main__.MyClass object at 0x00E31B90>



Beurk, exec et eval :o

multani a écrit :

Les classes que je veux instancier ne sont pas dans le même module ... :/
 
 
Par contre, ca c'est possible. Je crois voir le truc avec le dico :) :


class gni:
    def __init__(self):
        print "gni"
 
    def load(self, id):
         [...]
 
dico = dict()
dico["gni"] = gni()
 
class_name = "gni"
 
my_object = dico[class_name]


 
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 ?


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:
    def __init__(self):
        print "gni"
 
    def load(self, id):
         [...]
 
dico = dict()
dico["gni"] = gni
 
class_name = "gni"
 
my_object = dico[class_name]()


n°1201264
multani
Dépressionnisé
Posté le 16-09-2005 à 17:18:34  profilanswer
 

Hum, pas con aussi [:petrus75] (décidément, spas ma journée aujourd'hui :o )
 
Allez, c'est parti pour le dico [:dawa]

n°1201272
masklinn
í dag viðrar vel til loftárása
Posté le 16-09-2005 à 17:29:40  profilanswer
 

Kristoph a écrit :

Beurk, exec et eval :o


C'est très bien exec et eval quand on en abuse pas [:petrus75]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1201282
Kristoph
Posté le 16-09-2005 à 17:36:41  profilanswer
 

masklinn a écrit :

C'est très bien exec et eval quand on en abuse pas [:petrus75]


Les cas d'usage légitimes ne sont pas courants [:petrus75]

n°1332102
niark22
Posté le 25-03-2006 à 13:42:49  profilanswer
 

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

mood
Publicité
Posté le 25-03-2006 à 13:42:49  profilanswer
 

n°1332122
multani
Dépressionnisé
Posté le 25-03-2006 à 14:41:16  profilanswer
 

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 :
  1. obj = liste_fichiers[0]()

?

n°1332268
niark22
Posté le 25-03-2006 à 19:49:37  profilanswer
 

si merci, désolé j'avais pas compris ca comme ca
j suis un peu teub :pt1cable:  

n°1333333
boumbomagi​k
Posté le 28-03-2006 à 10:24:26  profilanswer
 

Moi en essayant ce code :
 

Code :
  1. file = []
  2. file.append("MaClasse" )
  3. obj = file[0]()


 
ca me met

Code :
  1. obj = file[0]()
  2. TypeError: 'str' object is not callable


 
 :??:


Message édité par boumbomagik le 28-03-2006 à 10:24:58
n°1333340
multani
Dépressionnisé
Posté le 28-03-2006 à 10:31:50  profilanswer
 

Normal, tu essaie d'appeller "MaClasse"(), faut faire ça plutôt :

Code :
  1. file = []
  2. file.append(MaClasse) # Pas une chaine de caractère
  3. obj = file[0]


Message édité par multani le 28-03-2006 à 10:32:36
n°1333343
boumbomagi​k
Posté le 28-03-2006 à 10:34:41  profilanswer
 

oui mais dans le premier message de niark22 il est question de chaine de caractere dans une liste et apres on instancie

n°1333349
multani
Dépressionnisé
Posté le 28-03-2006 à 10:39:11  profilanswer
 

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"]()

n°1333379
boumbomagi​k
Posté le 28-03-2006 à 11:03:38  profilanswer
 

multani a écrit :

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"]()


une reference comment ca?  

n°1333384
multani
Dépressionnisé
Posté le 28-03-2006 à 11:06:32  profilanswer
 

Tu mets MaClasse tout simplement.

n°1333401
boumbomagi​k
Posté le 28-03-2006 à 11:15:12  profilanswer
 

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 :pt1cable:  
 
en tout cas merci d'etre aussi patient :hello:

n°1333449
multani
Dépressionnisé
Posté le 28-03-2006 à 11:34:28  profilanswer
 

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 :
  1. for file in list_files:
  2.    my_module = __import__('file')
  3.    my_class = getattr(my_module, 'file')


 
Et après, tu as ta classe my_class, que tu peux instancier comme d'habitude : obj = my_class()

n°1336817
boumbomagi​k
Posté le 01-04-2006 à 02:18:22  profilanswer
 

ok merci bien, j'ai pas encore essayé mais des lundi j'y fonce :bounce:

 

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Python

  Créer un objet à partir d'une chaine de caractère

 

Sujets relatifs
Créer un champ de saisie formulaire dans une page web (newbie) ?Usage de la méthode toString() sur un objet String
Extraction d'une chaineBesoin de conseils pour créer une base mysql
créer un fichier .txt et faire un lien sur la .jsp / href (Websphere)programmation orienté objet
Comment utiliser une variable dans un objet ?créer une IHM pour mon programme en Fortran
Les logiciles pour créer son sitePréchargerment des animation & objet externe
Plus de sujets relatifs à : Créer un objet à partir d'une chaine de caractère


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR