如何将参数传递给重新连接客户端工厂



我在将参数传递给协调客户端工厂时遇到了一些问题:

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'

谁能告诉我我做错了什么?

使用或不使用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传递多个值的例外。

您的立即异常将通过在__init__的签名中添加self来解决。 但是,您可能会遇到进一步的问题。

最新更新