#1 Le 05/02/2008, à 11:53
- gouki
[Résolu] [Python] Nom de méthode dynamique
Bonjour à tous,
Au risque de me faire incendier, je pose cette question un peu triviale (mes recherches sur "dynamically", "class", "method", etc. sur gg se sont toutes soldées par un échec)... Comment fait-on pour générer dynamiquement un appel de méthode sans utiliser un eval()?
Par exemple, je définis:
method = "maMethode"
def maMethode(): pass
Je ne peux pas écrire:
method()
parce qu'un objet "chaà®ne" n'est pas appelable...
Comment fais-je?
Merci pour toute aide.
Dernière modification par gouki (Le 05/02/2008, à 14:03)
Hors ligne
#2 Le 05/02/2008, à 13:17
- HymnToLife
Re : [Résolu] [Python] Nom de méthode dynamique
La solution la plus courante est d'utiliser un dict, comme ça :
>>> methods = {}
>>> def tmp() :
... print "Hello world !"
...
>>> n = "foo"
>>> methods[n] = tmp
>>> methods["foo"]()
Hello world !
Ou vice versa :
>>> methods = {}
>>> def tmp() :
... print "Hello world !"
...
>>> methods["foo"] = tmp
>>> n = "foo"
>>> methods[n]()
Hello world !
Dernière modification par HymnToLife (Le 05/02/2008, à 13:20)
- Rodrigue, as-tu du cœur ?
- Non, mais j'ai du pique !
Hors ligne
#3 Le 05/02/2008, à 13:20
- gouki
Re : [Résolu] [Python] Nom de méthode dynamique
Merci.
Hors ligne
#4 Le 05/02/2008, à 13:44
- Karl_le_rouge
Re : [Résolu] [Python] Nom de méthode dynamique
Les fonctions en Python sont des objets ...
>> def maMethode():
.... pass
>> method = mamethode
>> method()
C'est normal que ton truc marche pas, car tu affectes une chaà®ne de caractères à l'object method ...
Hors ligne
#5 Le 05/02/2008, à 14:03
- gouki
Re : [Résolu] [Python] Nom de méthode dynamique
Je savais, mais je cherchais l'entourloupe pour passer d'une chaà®ne à une méthode (j'étais habitué à Perl, o๠ça se fait par magie). Apparemment, avec getattr(objet, methodname)(), ça marche bien aussi.
Merci de votre aide
Dernière modification par gouki (Le 13/02/2008, à 22:16)
Hors ligne