Для методов экземпляров используйте getattr
>>> class MyClass(object):
... def sayhello(self):
... print "Hello World!"
...
>>> m=MyClass()
>>> getattr(m,"sayhello")()
Hello World!
>>>
Для функций вы можете посмотреть в глобальном dict
>>> def sayhello():
... print "Hello World!"
...
>>> globals().get("sayhello")()
Hello World!
В этом случае, поскольку нет функции с именем prove_riemann_hypothesis
, используется функция по умолчанию (sayhello
)
>>> globals().get("prove_riemann_hypothesis", sayhello)()
Hello World!
Проблема при таком подходе заключается в том, что вы делите пространство имен с тем, что там есть. Возможно, вы захотите защититься от методов вызова json, которые не должны . Хороший способ сделать это - украсить ваши функции следующим образом:
>>> json_functions={}
>>> def make_available_to_json(f):
... json_functions[f.__name__]=f
... return f
...
>>> @make_available_to_json
... def sayhello():
... print "Hello World!"
...
>>> json_functions.get("sayhello")()
Hello World!
>>> json_functions["sayhello"]()
Hello World!
>>> json_functions.get("prove_riemann_hypothesis", sayhello)()
Hello World!