2017-01-24 5 views
0

おはよう! 私はリフレクションを使用してWebサービスのメソッドに行きます。コードの例を次に示します。Python:リフレクションを使用してWebサービスメソッドを取る

... 

api = cf.SomeServiceAPI() 

#Test1 
def test_SomeMethod(self): 
    result = self.sender('SomeMethod', [setofvalue]) 
    self.assertEqual(result, "Success", msg=result) 

def sender(self, methodname, setofvalue): 
    result = self.api.service.SomeMethod(setofvalue) 
    return result 

メソッドの名前を使用してメソッドを適用する方法を理解してもらえますか? ありがとう!

答えて

0

このように見えるのは、this質問の重複です。

あなたが使用する必要があります。clazzAが対象です

getattr(object, 'method_name') 
+0

ありがとうございます!モジュールの名前がわからない場合はこれが機能しますか? –

+0

オブジェクトにこの名前の属性がある場合は限ります。 – AndreyF

0

あなたはgetattr(clazzA, methodname)(setofvalue)を使用することができ、methodNameのは、文字列とsetofvalue内のメソッドの名前は、メソッドに渡すパラメータです。ここで

はあなたの要求行動の例です。

class A: 
    def some_method(self, arg): 
    print ("in: ", arg) 

#Test1 
def test_Some_method(): 
    result = sender('some_method', "method") 

def sender(methodname, setofvalue): 
    clazzA = A() 
    result = getattr(clazzA, methodname)(setofvalue) 
    return result 

test_Some_method() 

>>>'in: method' 
+0

ありがとう!しかし明示的なクラスはありません。すべてのメソッドはsuds..pxファイルで定義されています。それらの定義はwsdlを使用して自動的に行われます。 –

0

私は、タスクを解決しました。

... 
api = cf.SomeServiceAPI() 
m1 = api.service.__getattr__('SomeMethod') 

#Test1 
def test_SomeMethod(self): 
    result = self.sender(self.m1, [setofvalue]) 
    self.assertEqual(result, "Success", msg=result) 

def sender(self, methodname, setofvalue): 
    result = method(setofvalue) 
    return result 
関連する問題