我有一个“ Subscriber”类,可以处理大量WSDL中列出的具有各种SOAP方法的订户,如下所示:
class Subscriber(object):
soaps = {}
@classmethod
def load_soap(cls, name, wsdl):
cls.soaps[name] = zeep.Client(wsdl=wsdl).service
def __getattr__(self, item):
if item in self.soaps:
return self.soaps[item]
else:
raise AttributeError
def __init__(self, msisdn):
self.msisdn = msisdn
然后像这样使用它:
Subscriber.load_soap('Group', 'http://...')
ab1 = Subscriber('12221112233')
ab1.Group.CreateGroup(msisdn = ab1.msisdn, code = i, length = 1)
我只想将ab1.Group.CreateGroup(code = i, length = 1)
与msisdn
一起使用,并且将其他强制性属性自动添加到SOAP调用中。我可以列出特定SOAP方法的强制属性,并将其与Subscriber属性的列表进行比较,但是如何将代码添加到zeep.Client.Service
类的可调用子对象中呢?我认为我需要partial()
,__call__
和__getattr__
的某种组合,但无法将它们正确粘合在一起。
有什么建议吗?