我是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而不是像其他字符串一样。任何人都可以帮我解决这个问题吗?
答案 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()