Python CherryPy工具声明失败

Python CherryPy工具声明失败,python,python-3.6,cherrypy,Python,Python 3.6,Cherrypy,我正试图按照文档中的示例向CherryPy工具箱声明一个新工具: 根据我所写的例子: import cherrypy def myTool(): print ("myTool") class Root(object): @cherrypy.expose @cherrypy.tools.mytool() def index(self): return "Hello World!" if __name__ == '__main__': c

我正试图按照文档中的示例向CherryPy工具箱声明一个新工具:

根据我所写的例子:

import cherrypy

def myTool():
    print ("myTool")

class Root(object):
    @cherrypy.expose
    @cherrypy.tools.mytool()
    def index(self):
        return "Hello World!"

if __name__ == '__main__':
    cherrypy.tools.mytool = cherrypy.Tool('before_finalize', myTool)
    cherrypy.quickstart(Root(), '/')
这将导致以下错误:

Traceback (most recent call last):
  File "server.py", line 6, in <module>
    class Root(object):
  File "server.py", line 8, in Root
    @cherrypy.tools.mytool()
  AttributeError: 'Toolbox' object has no attribute 'mytool'
文件上说这两种方法的效果相同,但我的情况不是这样。如果有人知道我做错了什么,我将非常感激

该工具不应全局定义,因此使用@cherrypy.tools.mytool()符号


我使用的是python 3.6。

问题在于对python的求值顺序(自上而下)的误解,在定义类时还没有定义工具

您可以在顶部的另一个文件导入中定义该工具(在类定义之前),它应该可以工作


第二种形式是有效的,因为配置是使用配置中的字符串间接完成的,而不是真正的工具对象。

我只会使用flask。。。对不起,我知道这不是答案,但我感谢你!!从另一个文件导入工具就成功了!
import cherrypy

def myTool():
    print ("myTool")

class Root(object):
    @cherrypy.expose
    def index(self):
        return "Hello World!"
    index._cp_config = {'tools.mytool.on': True}

if __name__ == '__main__':
    cherrypy.tools.mytool = cherrypy.Tool('before_finalize', myTool)
    cherrypy.quickstart(Root(), '/')