传递带有多个参数的字符串

时间:2012-05-12 11:48:25

标签: python python-3.x

我是python的新手。我正在使用python 3.1.2我将通过我的代码与xml-rpc服务器进行通信。从我的代码中,我调用的是client.py,它将连接到服务器以获取服务器的注释列表。

工作代码:

class xmlrpc:
    def connect(self, webaddr):
        self.server = ServerProxy(webaddr)

列出方法: -

my_list = self.server.tests.getTests()

上述方法正在运行,但是,我限制将tests.getTests()设置为单个cmd_str,如下所示

my_list = self.server.cmd_str 

在这种情况下,cmd_str作为字符串本身发送到client.py而不是像其他字符串一样。任何人都可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

如果我理解你正确,你想调用一个对象的方法,但你事先不知道这个方法,你只需要一个字符串。这是对的吗?

class Server(object): 
    def isRunning(self): 
        print("you are inside the isRunning")

my_server = Server()
cmd_str = "isRunning"
my_function = my_server.__getattribute__(cmd_str)
my_function()
  

你在isRunning

里面

请注意,我让Server类继承自object以使其成为所谓的新式类,而isRunning获取参数self,告诉python这应该是一个实例方法。 my_server.__getattribute__将获得对绑定函数my_server.isRunning的引用,然后调用该函数。

您也可以这样做:

function_map = {
    'check_if_running': my_server.isRunning
}
cmd_str = 'check_if_running'
my_function = function_map[cmd_str]
my_function()

因此您不必完全按照调用命令字符串的方式命名函数(在python中,方法的命名约定通常是like_this,而不是likeThis

答案 1 :(得分:0)

如果我理解正确,你需要的是调用一个只在字符串中有名字的方法,而不是对方法本身的引用。

您可以使用getattr函数获取对要调用的方法的引用。

在您的示例中使用它:

cmdStr = "isRunning" 
func = getattr(Server, cmdStr)
test = func()