2012-05-12 18 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() 

iは以下のように単一cmd_strtests.getTests()を設定する制約をしたのに対し、上記の方法は、作動されるが、この場合、cmd_strは文字列としてclient.pyに送信され、他の文字とは異なります。誰もがこれを達成する方法を私に助けてくれますか?

+0

私はあなたが求めているものを考え出す本当に苦労しています。 "この場合は、cmd_strをclient.pyに文字列として送信し、他のものとは違います"と言い換えるか、いくつかの例を追加できますか? – garnertb

+0

申し訳ありません。私の言うことは、私のプログラムでは、cmd_strをtests.getTests()にハードコーディングしてclient.py ..に渡していますが、client.pyがそれを読み込むと、 tests_gettests()ではなくcmd_strを値と見なします。 cmd_strの値をどのように渡すことができますか? – user1390672

+0

私は単純な方法でそれを置くと、どのように印刷を実行するのですか?クラスサーバー: DEF isRunning(): プリント( "あなたはisRunning内にある") CMDSTR = "isRunning()" テスト= Server.cmdStr – user1390672

答えて

1

私は右のあなたを理解していれば、あなたは、オブジェクトのメソッドを呼び出したいが、あなたは事前に方法を知らない、あなただけの文字列でそれを持っています。あれは正しいですか?あなたは、私はそれは、いわゆる新しいスタイルのクラスにするためにobjectからServerクラスを継承してみましょう、とisRunningは引数selfを取得していることをisRunning

注意、内側にある

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() 

これは、これがインスタンスメソッドであるべきであることを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() 
関連する問題