Tester l'existence d'une méthode dans une class

Le problème exposé dans ce sujet a été résolu.

Conceptuellement, je dirais que l'introspection est à prendre avec des pincettes, il faut toujours se demander s'il n'y a pas d'autres solutions que celle-ci. Ça tombe bien j'en ai une ;)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
>>> class A:
...     pass
... 
>>> a = A()
>>> try:
...     x = a.method()
... except AttributeError:
...     pass
... 
>>> 

En C on utiliserait la technique du LBYL, mais en python on préfère l'EAFP (avec try et except).

Voir une discussion intéressante ICI

Bonne continuation…

Le problème est que j'ai le nom de ma méthode dans une variable, mais je peux faire :

1
2
3
4
5
6
try:
    func = getattr(obj, action) # la variable action contient le nom de ma méthode
except AttributeError:
    pass # do something
else:
    result = func(args)

L'exemple est tiré de l'article donné par Grimur. Mais sinon merci pour LBYL et EAFP que je ne connaissais pas !

Je ne comprend pas réellement le problème, c'est sans doute en rapport avec la conception qui n'est pas suffisamment exprimée ici, car tu ne veux pas rentrer dans les détails… Mais le principe est d'exécuter ta méthode directement sans l'utilisation de getattr.

Ma solution, c'est "j'essaie d'exécuter ma méthode de classe et dans le cas où cette méthode n'existe pas, faire autre chose"

Maintenant la question est pourquoi le nom d'une méthode dans une variable, c'est là où plus de détails sur la conception seraient bienvenue, mais c'est toi qui voit.

Pour faire comme fred le conseille, tu peux procéder ainsi :

1
2
3
4
try:
    x = YourClass.__dict__[method_name](obj, args)
except KeyError:
    pass
+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte