gpt4 book ai didi

python - Tornado 在 RequestHandler 中获取对实例变量的引用

转载 作者:太空狗 更新时间:2023-10-29 20:42:16 24 4
gpt4 key购买 nike

在编写 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 实例,我需要确保 ref_object如果在 change_ref_object() 中更改,则在 SomeHandler 中访问的对象是同一个对象。

Somehandler 仅在创建 python tornado 网络服务器(应用程序)时作为一个类被引用,并且不清楚如何访问这样的 SomeHandler 实例以在在 MyServer 中更改。

这基本上归结为我不理解 SomeHandler 的实例在 MyServer 范围内的位置(或者具体来说,MyServer 的应用程序对象)。

最佳答案

当你创建你的 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()

关于python - Tornado 在 RequestHandler 中获取对实例变量的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23902532/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com