1

I'm writing a class which I intend to use to create subroutines, constructor as following:

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

The problem is that I want to call the function on the pattern "rpc.serve.(function name here)(params)", where rpc is a serverProxy object that I'm using to call XMLRPC functions, and serve.-function name- is the method I'm calling on the XMLRPC-server.

I've looked at Calling a function from a string with the function's name in Python, but seeing how my serverProxy object doesnt know which "remote attributes" it have, I cant use the getattr() function to retrieve the method.

I've seen a example by making a dictionary to call a given function, but is there no way to make the function truly dynamic by creating the function call as you would create a String? Like running a String as a function?

Community
  • 1
  • 1
Duveit
  • 149
  • 2
  • 2
  • 11

1 Answers1

2

You can use getattr to get the function name from the server proxy, so calling the function like this will work:

getattr(rpc, function_name)(*params)
dF.
  • 67,375
  • 27
  • 125
  • 135
  • You're right! Didnt know. But I still would like to know if its possible to run a given String as a method without using getattr() though. Even when I see the obvious pro's of using the getattr() method. – Duveit May 23 '09 at 12:02
  • You could "run the string" via eval or exec, but that would be supremely [expletive deleted], with no advantage at all wrt getattr and more disadvantages than you can shake a stick at. – Alex Martelli May 23 '09 at 15:56