将参数传递给reconectingclientfactory时遇到一些问题:
class MyClientFactory(WebSocketClientFactory, ReconnectingClientFactory):
protocol = MyClientProtocol
maxDelay=90
maxRetries=10000
def __init__(ver,cfg,*args,**kwargs):
self.sysVer=ver
self.sysCfg=cfg
super().__init__(*args,**kwargs)
def clientConnectionFailed(self, connector, reason):
print("Client connection failed {0} to: {1} .. retrying ..".format(reason,connector))
self.retry(connector)
def clientConnectionLost(self, connector, reason):
print("Client connection lost {0} to {1} .. retrying ..".format(reason,connector))
self.retry(connector)
当我打电话时:
factory = MyClientFactory('ws:/mywswebserver/websocket/', ver=sys_ver, cfg=sys_cfg,protocols={"wsprotocol"})
出现类似以下错误:
TypeError: __init__() got multiple values for argument 'cfg'
有人可以告诉我我在做什么错吗?
答案 0 :(得分:1)
使用或不使用super
是方法的(通常未记录)公共接口的一部分。另外,super
确实不允许在层次结构中的任何位置更改方法的签名。实际上,它不是将自定义配置传递到层次结构中特定类的有用工具。
说:
class MyClientFactory(WebSocketClientFactory, ReconnectingClientFactory):
def __init__(ver,cfg,*args,**kwargs):
您在此签名中忘记了self
。因此在:
factory = MyClientFactory('ws:/mywswebserver/websocket/', ver=sys_ver, cfg=sys_cfg,protocols={"wsprotocol"})
您正在传递'ws:/mywswebserver/websocket/'
作为cfg
参数。然后,您还传递了sys_cfg
作为另一个值。因此,您有一个关于为cfg
传递多个值的例外。
通过将self
添加到您的__init__
的签名中,可以解决您的立即例外情况。但是,您可能随后会遇到其他问题。