Мне нужен способ для обратного вызова функций через строку.
Из комментариев к вашему вопросу я понимаю, что вы хотели бы сделать что-то вроде:
# ...
callback_str = getcallback_str() # e.g., 'self.logic.account_new'
callback = eval_dottedname(self, callback_str)`
В этом случае eval_dottedname()
функция может быть реализована как:
def eval_dottedname(obj, dottedname):
if dottedname.partition(".")[0] != 'self': # or some other criteria
# to limit the context
raise ValueError
return reduce(getattr, dottedname.split('.')[1:], obj)
Лучшим подходом было бы ограничить обратные вызовы строк простыми идентификаторами и использовать таблицу диспетчеризации, такую как stdlib cmd
module :
def dispatch(self, callback_str):
return getattr(self, 'do_' + callback_str, self.default)()
def do_this(self):
pass
def do_that(self):
pass