Динамические вызовы функций в Python с использованием XMLRPC

Я пишу класс, который я намерен использовать для создания подпрограмм, конструктора следующим образом:

def __init__(self,menuText,RPC_params,RPC_call):
   #Treat the params
   #Call the given RPC_call with the treated params

Проблема в том, что я хочу вызвать функцию по шаблону "rpc.serve.(здесь имя функции)(params)", где rpc — это объект serverProxy, который я использую для вызова функций XMLRPC. , и serve.-function name- это метод, который я вызываю на XMLRPC-сервере.

Я просмотрел вызов функции из строки с именем функции в Python, но видя, что мой объект serverProxy не знает, какие у него есть «удаленные атрибуты», я не могу использовать функцию getattr() для получения метода.

Я видел пример создания словаря для вызова данной функции, но нет ли способа сделать функцию действительно динамической, создав вызов функции, как если бы вы создали строку? Например, запустить String как функцию?


person Duveit    schedule 23.05.2009    source источник
comment
Зачем тебе этот узор? почему не rpc.functionName(params)?   -  person Nadia Alramli    schedule 23.05.2009
comment
Если вы имеете в виду, почему я добавил serve , это просто для логической группировки функций на сервере, и ничего функционального.   -  person Duveit    schedule 23.05.2009


Ответы (1)


Вы можете использовать getattr для получения имени функции от прокси-сервера, поэтому такой вызов функции будет работать:

getattr(rpc, function_name)(*params)
person dF.    schedule 23.05.2009
comment
Ты прав! Не знал. Но я все же хотел бы знать, возможно ли запустить данную строку как метод без использования getattr(). Даже когда я вижу очевидные преимущества использования метода getattr(). - person Duveit; 23.05.2009
comment
Вы можете запустить строку через eval или exec, но это будет в высшей степени [ругательство удалено], без каких-либо преимуществ перед getattr и с большим количеством недостатков, чем вы можете потрясти палкой. - person Alex Martelli; 23.05.2009