2012-05-12 2 views
3

저는 python을 처음 사용합니다. 나는 파이썬 3.1.2를 사용하고있다. xml-rpc 서버와 코드를 통해 통신해야한다. 내 코드에서 서버의 주석 목록을 얻으려면 서버에 연결하는 client.py를 호출합니다.여러 개의 인자를 가진 문자열 전달

근로 코드 :

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

방법을 목록 : -

my_list = self.server.tests.getTests() 

내가 아래와 같이 하나의 cmd_strtests.getTests()을 설정하는 제약 조건을했습니다 반면, 위의 방법이 작동되지만,

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가 그것을 읽으면 tests_getTests()가 아니라 cmd_str을 값으로 간주합니다. 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는 내부 내가 object에서 Server 클래스 상속이 소위 새로운 스타일의 클래스를 만들 수 있도록

주이며, isRunning는 인수 self를 얻을 수 있음 이것은 파이썬에게 이것이 인스턴스 메소드이어야 함을 알려줍니다. 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() 

그래서 당신이 정확히 명령 문자열은 파이썬에서 (호출되는 방법을 당신의 기능을 이름이없는, 방법에 대한 명명 규칙은 일반적으로 like_this입니다 , 아니 likeThis)

0

내가 옳았어요, 당신이 필요로하는 것은 당신이 문자열에 이름 만 가지고 방법 자체에 대한 참조가없는 메서드를 호출하는 것입니다.

getattr 함수를 사용하여 호출 할 메서드에 대한 참조를 가져올 수 있습니다.

귀하의 예제에서 사용 :

cmdStr = "isRunning" 
func = getattr(Server, cmdStr) 
test = func() 
관련 문제