我有一个远程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