Вызовите метод объекта с аргументами в Python - PullRequest
9 голосов
/ 30 марта 2011

Я хочу иметь возможность вызывать различные методы в классе Python с динамическим именем функции, например,

class Obj(object):
    def A(self, x):
        print "A %s" % x

    def B(self, x):
        print "B %s" % x

o = Obj()

 # normal route
o.A(1) # A 1
o.B(1) # B 1

 # dynamically
foo(o, "A", 1) # A 1; equiv. to o.A(1)
foo(o, "B", 1) # B 1

Что такое "foo"? (или есть какой-то другой подход?) Я уверен, что он должен существовать, но я просто не могу найти его или вспомнить, как он называется. Я смотрел на getattr, apply и другие в списке встроенных функций . Это такой простой справочный вопрос, но, увы, вот я!

Спасибо за чтение!

Ответы [ 2 ]

32 голосов
/ 30 марта 2011

Ну, getattr действительно, кажется, то, что вы хотите:

getattr(o, "A")(1)

эквивалентно

o.A(1)
5 голосов
/ 30 марта 2011

Методы в Python являются первоклассными объектами.

getattr(o, 'A')(1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...