Django Channels中super().__init__无星号传参是否正确?
Django Channels中ChatConsumer的__init__调用问题
这种写法不正确,会触发参数不匹配的错误。
原因很直接:
- 你定义
__init__时用了*args(把任意数量的位置参数打包成元组)和**kwargs(把任意数量的关键字参数打包成字典),但直接将args和kwargs传给父类构造器时,相当于把整个元组作为单个位置参数、整个字典作为单个关键字参数传递,而不是把里面的元素分散传递。 WebsocketConsumer的父类构造器期望接收的是分散的位置参数和关键字参数,不是打包后的元组和字典,这会直接抛出TypeError,提示参数数量或类型不匹配。
正确的写法必须加上单星号和双星号解包参数:
class ChatConsumer(WebsocketConsumer): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.room_name = None self.room = None
内容的提问来源于stack exchange,提问作者kubaSpolsky
相关产品推荐
相关产品推荐

