在编写龙卷风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
Run Code Online (Sandbox Code Playgroud)
我需要访问的ref_object实例MyServer中post()的方法SomeHandler,我需要确保访问在ref_object SomeHandler是相同的对象,如果它在改变change_ref_object().
Somehandler在创建python tornado web服务器(应用程序)时仅被引用为类,并且不清楚如何SomeHandler在更改其时更改其临时ref_object 的实例MyServer.
它基本上归结为我不了解SomeHandler的实例在MyServer(或特别是MyServer的应用程序对象)的范围内的位置.
dan*_*ano 16
创建Application对象时,可以将ref_object实例SomeHandler放入dict中,作为通常用于定义处理程序的元组的第三个参数.所以,在MyServer.__init__:
self.application = tornado.web.Application([
(r"/test", SomeHandler, {"ref_object" : self.ref_object}),
])
Run Code Online (Sandbox Code Playgroud)
然后添加一个initialize方法SomeHandler:
class SomeHandler(tornado.web.RequestHandler):
def initialize(self, ref_object):
self.ref_object = ref_object
def post(self):
self.ref_object.method()
Run Code Online (Sandbox Code Playgroud)