【问题标题】:Tornado Get Reference to Instance Variable in RequestHandlerTornado 在 RequestHandler 中获取对实例变量的引用
【发布时间】:2014-05-28 03:51:42
【问题描述】:

在编写 tornado Http Server 时,我无法从单独的 RequestHandler 对象访问包含 tornado 应用程序对象和 start 方法的主类中的实例变量。考虑以下粗略的例子,

class MyServer(object):

    def __init__(self):
        self.ref_object = 0 
        self.application = #Add tornado.web.applicaiton here

    def change_ref_object(self, ref_obj):
        self.ref_object = ref_obj

    def start(self):
        #start the server
        pass

class SomeHandler(tornado.web.RequestHandler):

    def post(self):
        #Yada, yada, yada

        #Call method on Myserver's ref_object
        pass

我需要在SomeHandlerpost() 方法中访问MyServer 的ref_object 实例,并且我需要确保在SomeHandler 中访问的ref_object 是同一个对象,如果它在change_ref_object() 中更改的话。

Somehandler 仅在创建 python tornado Web 服务器(应用程序)时被引用为一个类,并且不清楚如何访问 SomeHandler 的此类实例以在 MyServer 中更改其临时 ref_object 时更改其临时 ref_object .

这基本上归结为我不了解 SomeHandler 的实例将存在于 MyServer 范围内(或具体而言,MyServer 的应用程序对象)的什么位置。

【问题讨论】:

  • 感谢您提出这个问题:由于tornado 的独特结构,我一直在努力解决这个问题

标签: python tornado


【解决方案1】:

当您创建Application 对象时,您可以将ref_object 实例传递给SomeHandler,方法是将其作为通常用于定义处理程序的元组的第三个参数放置在字典中。所以,在MyServer.__init__

self.application = tornado.web.Application([
    (r"/test", SomeHandler, {"ref_object" : self.ref_object}),
])

然后给SomeHandler添加一个initialize方法:

class SomeHandler(tornado.web.RequestHandler):
    def initialize(self, ref_object):
        self.ref_object = ref_object

    def post(self):
       self.ref_object.method()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-23
    • 2017-05-03
    • 2023-03-19
    • 2018-02-03
    相关资源
    最近更新 更多