3

我是 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,而不是像其他字符串一样。谁能帮助我如何实现这一目标?

4

2 回答 2

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, not likeThis

于 2012-05-14T14:47:28.933 回答
0

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

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

在您的示例中使用它:

cmdStr = "isRunning" 
func = getattr(Server, cmdStr)
test = func()
于 2012-06-09T13:23:51.757 回答