2012-05-12 146 views
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,而不是其他人。任何人都可以幫助我如何實現這一目標嗎?

+0

我有一個真的很難搞清楚你的​​要求。你能改述「在這種情況下,cmd_str發送到client.py作爲一個字符串本身,而不是像其他人」或添加一些例子? – garnertb

+0

抱歉。我想說的是,在我的程序中,我已經將cmd_str硬編碼爲tests.getTests()並將它傳遞給client.py ..但是,當client.py讀取它時,它認爲cmd_str是一個值而不是tests.getTests()。我如何傳遞cmd_str的值? – user1390672

+0

如果我把它放在一個簡單的方式,如何讓打印執行?類服務器: 高清isRunning(): 打印( 「你是,將isRunning內」) cmdStr = 「isRunning()」 測試= Server.cmdStr – user1390672

回答

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內

注意,我讓從objectServer類繼承,使之成爲所謂的新式類,而且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

0

如果我理解它是正確的,你需要的是調用一個方法,你只有一個字符串中的名稱,而不是對方法本身的引用。

您可以使用getattr函數來獲取您要調用的方法的引用。

在你的榜樣使用它:

cmdStr = "isRunning" 
func = getattr(Server, cmdStr) 
test = func() 
相關問題