91 votes

Appeler une méthode Python par son nom

Si j'ai un objet et un nom de méthode dans une chaîne, comment puis-je appeler la méthode ?

class Foo:
    def bar1(self):
        print 1
    def bar2(self):
        print 2

def callMethod(o, name):
    ???

f = Foo()
callMethod(f, "bar1")

122voto

Enrico Carlesso Points 3182

Utilisez la fonction getattr() intégrée :

class Foo:
    def bar1(self):
        print(1)
    def bar2(self):
        print(2)

def call_method(o, name):
    return getattr(o, name)()


f = Foo()
call_method(f, "bar1")  # prints 1

Vous pouvez également utiliser setattr() pour définir les attributs de classe par noms.

9voto

J'avais une question similaire, je voulais appeler la méthode de l'instance par référence. Voici des choses drôles que j'ai trouvées :

instance_of_foo=Foo()

method_ref=getattr(Foo, 'bar')
method_ref(instance_of_foo) # instance_of_foo becomes self

instance_method_ref=getattr(instance_of_foo, 'bar')
instance_method_ref() # instance_of_foo already bound into reference

Python est incroyable !

3voto

Björn Points 15485
getattr(globals()['Foo'](), 'bar1')()
getattr(globals()['Foo'](), 'bar2')()

Pas besoin d'instancier Foo d'abord !

2voto

mkotechno Points 1480
def callmethod(cls, mtd_name):    
    method = getattr(cls, mtd_name)
    method()

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X