我有一個遠程API接受個XML只可以被稱爲像調用任意方法,如xmlrpclib.ServerProxy
api = xmlrpclib.ServerProxy(IP)
result = api.Execute({"Method": 'Method_name', "Params": [P1, P2],
... # technical values - authentication, etc
})
的技術價值不受頻繁改變 - 整個腳本通常會使用相同的值他們,所以我創建了一個有一個方法
def call(self, method_name, params):
self.api.Execute(<constructed dictionary>)
我在想,如果有可能直接調用這些方法像的self.api
方法的類:
self.api.method_name(params)
這又將填補.Execute
,其餘的我,就像一般的想法:
def __getattr__(self, item):
if item in self.__dict__:
return self.item
else:
return functools.partial(self.call, method_name=item)
所以,如果我定義在類中的方法(self.foo
,self.bar
等) - 調用它會產生真實的結果self.foo
和self.bar
。
調用它像self.api.METHOD(params)
其中METHOD
是一個自定義的工作,但這種做法「污染」,我沒有定義,像self.api.__repr__
和類似
其他方法這是真的,根據我的this question的方法重寫__getitem__
完全不正確?如果是這樣 - 我應該如何執行此操作?
'Execute'是單個字典還是一系列關鍵字參數?第一塊中的代碼似乎表示前者,但您調用「partial」的方式表示後者。此外,是一個暴露給腳本的可用'Execute'方法的綜合列表? – Will
@wilusdaman,它實際上需要一個字典。使用'partial'的方式是因爲有間歇性的內部和外部方法來構造這個字典並且對它的值進行操作。綜合列表不幸的是不可用。 – RebelWithoutAPulse