IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Appeler une méthode par son nom sans utiliser eval


Sujet :

Python

  1. #1
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut Appeler une méthode par son nom sans utiliser eval
    Bonjour,
    le code suivant fonctionne mais il me semble que l'on peut faire sans eval mais je n'arrive plus à trouver la discussion où j'avais lu cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    #!/usr/bin/env python
    #coding=utf-8
     
    class test():
        def callMethod(self, n):
            n = str(n)
            try:
                eval('self.method' + n + '()')
            except:
                print 'method' + n + ' does not existe.'
     
        def method1(self):
            print '1'
     
        def method2(self):
            print '2'
     
        def method3(self):
            print '3'
     
    pourTester = test()
    for n in range(1, 4):
        pourTester.callMethod(n)

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 824
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 824
    Points : 7 120
    Points
    7 120
    Par défaut
    en remplaçant eval par exec?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 159
    Points : 224
    Points
    224
    Par défaut
    Salut,
    Un truc comme getattr ?

  4. #4
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut
    Merci.

    Va falloir que je stocke cela quelque part :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #!/usr/bin/env python
    #coding=utf-8
     
    class test():
        def callMethod(self, n):
            n = str(n)
            try:
                #eval('self.method' + n + '()')
                method = getattr(self, 'method' + n)
                method()
            except:
                print 'method' + n + ' does not existe.'
     
        def method1(self):
            print '1'
     
        def method2(self):
            print '2'
     
        def method3(self):
            print '3'
     
    pourTester = test()
    for n in range(1, 4):
        pourTester.callMethod(n)

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 159
    Points : 224
    Points
    224
    Par défaut
    De rien,
    C'est surtout le bouquin Dive into python qu'il faut stocker dans un coin

  6. #6
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut
    Citation Envoyé par valAa Voir le message
    De rien,
    C'est surtout le bouquin Dive into python qu'il faut stocker dans un coin
    Je ne lavais pas lu mais avec la sortie de Python 3 et la mise à jour du bouquin, je vais enfin le lire. Ce livre semble bourré d'astuces : sur le net j'avais été bleuffé par l'algorithme pour créer des nombres en chiffres romains.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 18/04/2011, 13h09
  2. Appeler une variable par son nom
    Par averooès dans le forum VBA Access
    Réponses: 7
    Dernier message: 07/04/2009, 22h11
  3. [POO] Appeler une fonction par son nom dans une variable
    Par whitespirit dans le forum Langage
    Réponses: 16
    Dernier message: 18/06/2008, 11h23
  4. [POI] Appeler une cellule par son nom
    Par Galak extra dans le forum Documents
    Réponses: 9
    Dernier message: 17/06/2008, 14h33
  5. [VB6] Appeler une procedure par son nom.
    Par kenn dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 24/05/2006, 09h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo