Python 派林抱怨方法';接收到的数据';对于RequestHandler,未重写

Python 派林抱怨方法';接收到的数据';对于RequestHandler,未重写,python,abstract-class,tornado,pylint,Python,Abstract Class,Tornado,Pylint,例如: class MainHandler(tornado.web.RequestHandler): def get(self): self.render('data.html', items = []) 它会产生以下pylint错误: warning (W0223, abstract-method, MainHandler) Method 'data_received' is abstract in class 'RequestHandler' but is no

例如:

class MainHandler(tornado.web.RequestHandler):
    def get(self): 
        self.render('data.html', items = [])
它会产生以下pylint错误:

warning (W0223, abstract-method, MainHandler) Method 'data_received' is abstract in 
class 'RequestHandler' but is not overridden

我知道它想让我重写这个
数据\u接收的方法,但我不明白为什么,以及它的作用是什么?

这实际上是
pylint
的一个问题,这是Python本质上不可避免的

RequestHandler类有许多方法充当钩子,您可以重写这些钩子来执行不同的操作,但根据应用程序的代码,实际上只能调用其中的一些钩子。为了确保您在使用某些功能时实现了所有应该实现的功能,当您执行一些期望您的类具有自定义实现的操作时,将触发默认的数据_接收实现

通常这不是什么问题,因为Python允许您拥有失败的代码路径,并且不会抛出任何错误。因为
pylint
试图“帮助”确保您完成了所有应该做的事情,所以它看到
NotImplementedError
抛出并警告您可能会根据您的操作触发它

真正的问题是,由于Python是一种解释语言,像
pylint
这样的工具很难查看代码并确保其“安全”。Python为您提供了很多灵活性和功能,但反过来,您又承担了保持程序逻辑清晰的负担,并知道哪些可能的问题实际上是问题,哪些不是问题

幸运的是,
pylint
知道自己的局限性,并为您提供了很好的工具来禁用无关警告。添加注释行

# pylint: disable=W0223

就在您的类定义和警告之前,应该停止为这个实例弹出,而忽略其他所有内容

首先,感谢菲利普·卡斯塔尼亚的回答,为我指明了正确的方向

我遇到了与OP相同的问题,除了我的Pycharm(2018.3.4)似乎没有使用pylint,而是使用它自己的检查引擎。我用Phillip Castagna建议的类似技巧解决了类似的问题:

# noinspection PyAbstractClass
class XyzRequestHandler(tornado.web.RequestHandler):
    def prepare(self):
        print('-' * 100)
        self.set_header('Access-Control-Allow-Origin', '*')

    def print_n_respond(self, result):
        response = json.dumps(result)
        print('responding with:\n', response)
        print()
        self.write(response)

这是。希望这能帮助那些使用与我相同设置的人。

除了神秘的警告号(W0222),还可以在注释中为警告或错误写入“代码名”:pylint:disable=abstract method
。这样,注释的信息量就更大了,而不需要查找警告号。我将建议的
#pylint:disable=W0223
放在继承tornado.web.Request的类之前,但警告仍然存在,如中所示,我的类名仍然用警告“类XyzRequestHandler必须实现所有抽象方法”下划线哈,问题解决了,我不好,请看下面我的答案中的细节,希望这能帮助那些使用Pycharm的人自己检查