OVH Cloud OVH Cloud

Nom de classe sous forme de chaine

5 réponses
Avatar
Franssoa
Bonjour,

Je cherche à créer un objet Class, et/ou une instance de classe à partir
de son nom contenu dans une chaine.

class A:
pass

c=A == c=mais_quelle_est_donc_cette_fonction("A")

Merci
Franssoa

5 réponses

Avatar
Jean-Baptiste renard
Franssoa wrote:
Je cherche à créer un objet Class, et/ou une instance de classe à partir
de son nom contenu dans une chaine.


la fonction eval est ce que tu veux.

exemple:
class A:
... pass



...
msg="A"
o=eval(msg+"()")
type(o)
<type 'instance'>



o=A()
type(o)
<type 'instance'>






Avatar
Bruno Desthuilliers
Franssoa wrote:
Bonjour,

Je cherche à créer un objet Class, et/ou une instance de classe à partir
de son nom contenu dans une chaine.

class A:
pass

c=A == c=mais_quelle_est_donc_cette_fonction("A")


c = globals('A')


Merci
Franssoa



--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in ''.split('@')])"

Avatar
kerflyn

Franssoa wrote:
Bonjour,

Je cherche à créer un objet Class, et/ou une instance de classe à partir
de son nom contenu dans une chaine.

class A:
pass

c=A == c=mais_quelle_est_donc_cette_fonction("A")


c = globals('A')



ça ne marche pas chez moi. Par contre ça oui :

# récupère la classe
... cls = globals()['A']



# récupère une instance
... c = globals()['A']()




Sinon, il y a aussi:

import __main__
c = __main__.__dict__['A']()
c == A()
True




... Mais ça ne fonctionne qu'avec le script principal.

-kerflyn



Avatar
Bruno Desthuilliers
kerflyn wrote:

Franssoa wrote:
Bonjour,

Je cherche à créer un objet Class, et/ou une instance de classe à partir
de son nom contenu dans une chaine.

class A:
pass

c=A == c=mais_quelle_est_donc_cette_fonction("A")
c = globals('A')




ça ne marche pas chez moi. Par contre ça oui :

# récupère la classe
... cls = globals()['A']



# récupère une instance
... c = globals()['A']()




Sinon, il y a aussi:

import __main__
c = __main__.__dict__['A']()
c == A()
True




... Mais ça ne fonctionne qu'avec le script principal.


En général, quand je commence à voir des accès à des attributs
'magiques' dans mon code, c'est qu'il y a quelque chose qui cloche...


--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in ''.split('@')])"




Avatar
Franssoa
Franssoa wrote:
Je cherche à créer un objet Class, et/ou une instance de classe à partir
de son nom contenu dans une chaine.


la fonction eval est ce que tu veux.


Merci à toi ainsi qu'à Bruno.
Eval est en effet le plus simple. Je pensais simplement être passé à
côté d'une fonction spécifique.

Pour info j'utilise la création dynamique de classe pour synchroniser
deux carnets d'adresses, avec une table des éléments supprimés
(nom_de_classe, no_index)

Franssoa