Python3.6继承Tornado TCPServer调用super.__init__()报错求助
解决Tornado TCPServer继承时的super调用错误
这个错误很典型——你在调用父类构造方法的时候,super的用法写错了!
看你的报错信息里的关键提示:
TypeError: descriptor 'init' of 'super' object needs an argument
问题出在你写的super.__init__()上。super是一个类,必须先通过super()实例化出一个对象,才能调用它的__init__方法。直接用super.__init__()相当于试图调用类的未绑定方法,它缺少了必要的类和实例参数,所以才会抛出这个类型错误。
正确的代码写法示例
假设你的TelemetryServer类结构如下,修改__init__方法里的super调用即可:
from tornado.tcpserver import TCPServer class TelemetryServer(TCPServer): def __init__(self): # 必须加上括号,实例化super对象后再调用__init__ super().__init__() # 这里可以添加你的自定义初始化逻辑
额外说明
在Python 3中,super()会自动识别当前类和实例,不需要像Python 2那样显式传入super(TelemetryServer, self)(当然写全也能正常运行,但完全没必要)。只要把super.__init__()改成super().__init__(),你的代码就能正常实例化TelemetryServer了。
内容的提问来源于stack exchange,提问作者Greg Brown
相关产品推荐
相关产品推荐

