Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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