2009-05-23 3 views
1

Я пишу класс, который я намерен использовать для создания подпрограмм, конструктор следующим образом:Динамические вызовы функций в 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 - это метод, который я вызываю на XMLRPC -server.

Я просмотрел Calling a function from a string with the function's name in Python, но, видя, как мой объект serverProxy не знает, какие «удаленные атрибуты» он имеет, я не могу использовать функцию getattr() для извлечения метода.

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

+0

Почему вы хотите этот шаблон? почему бы не rpc.functionName (params)? –

+0

Если вы имеете в виду, почему я добавил «служить», это просто для логической группировки функций на сервере, и ничего не функционирует. – Duveit

ответ

2

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

getattr(rpc, function_name)(*params) 
+0

Вы правы! Не знал. Но мне все же хотелось бы знать, можно ли запустить данную String как метод без использования getattr(). Даже когда я вижу очевидного профессионала в использовании метода getattr(). – Duveit

+0

Вы можете «запустить строку» через eval или exec, но это было бы в высшей степени [исключено из-за исключения], без каких-либо преимуществ по сравнению с getattr и другими недостатками, чем вы можете встряхнуть палку. –

 Смежные вопросы

  • Нет связанных вопросов^_^