Использование строки в качестве имени переменной - PullRequest
6 голосов
/ 18 июня 2009

Могу ли я использовать строку для вызова метода класса? Вот пример, который, надеюсь, объяснит лучше (используя то, что, как я думаю, должен быть):

class helloworld():
    def world(self):
        print "Hello World!"

str = "world"
hello = helloworld()

hello.`str`()

Что бы вывести Hello World!.

Заранее спасибо.

Ответы [ 4 ]

16 голосов
/ 18 июня 2009

Вы можете использовать getattr:

>>> class helloworld:
...     def world(self):
...         print("Hello World!")
... 
>>> m = "world"
>>> hello = helloworld()
>>> getattr(hello, m)()
Hello World!
  • Обратите внимание, что в этом случае парены в class helloworld(), как в вашем примере, не нужны.
  • И, как указывает SilentGhost , str - неудачное имя для переменной.
2 голосов
/ 18 июня 2009

Предупреждение: exec - опасная функция, изучите ее перед использованием

Вы также можете использовать встроенную функцию «exec»:

>>> def foo(): print('foo was called');
...
>>> some_string = 'foo';
>>> exec(some_string + '()');
foo was called
>>>
0 голосов
/ 18 июня 2009

То, что вы ищете, это exec

class helloworld():
    def world(self):
        print "Hello World!"

str = "world"
hello = helloworld()

completeString = "hello.%s()" % str

exec(completString)
0 голосов
/ 18 июня 2009

С одной стороны, вы можете установить переменные равными функциям, как данные

def thing1():
    print "stuff"

def thing2():
    print "other stuff"

avariable = thing1
avariable ()
avariable = thing2
avariable ()

И вы получите

stuff
other stuff

Тогда вы можете получить более сложный и

somedictionary["world"] = world
somedictionary["anotherfunction"] = anotherfunction

и так далее. Если вы хотите автоматически скомпилировать методы модулей в словарь, используйте dir ()

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