Python:迭代一个由类中的多个方法共享的列表

时间:2018-04-27 11:02:53

标签: python class

我使用tornado.websocket,其中类方法是WebSocketHandler方法的覆盖。无论如何,我的代码看起来像这样:

class SocketHandler(tornado.websocket.WebSocketHandler):
    current_ninja_pool = enumerate(return_dependency_lvl_0())
    current_ninja = next(current_ninja_pool)
    file_to_upload = []

    def check_origin(self, origin):
        return True

    def open(self):
        logging.info("A client connected.")
        self.run()

    def run(self):
        if condition:
            do_this()
    else:
        do_that()
        self.current_ninja = next(self.current_ninja_pool)
        self.run()

def on_message(self, message):
    do_a_lot_of_stuff()
    if message == 'next one':
        self.current_ninja = next(self.current_ninja_pool)

def on_close(self):
    logging.info("A client disconnected")

所以,我想要的是能够迭代我的enumerate,以便可以在方法runon_message中处理每个元素,具体取决于我的客户端 - websocket将如何回答。问题是我想在特定条件下进行迭代,而且我不知道如何做到这一点。由于我对操作类变量和实例变量的方式不太熟悉,我可能在这里忽略了一点。 谢谢

1 个答案:

答案 0 :(得分:1)

你需要一个迭代器。幸运的是,enumerate已经返回一个迭代器;你只需要访问它,而不是存储当前项目。

我还怀疑current_ninja_pool应该是一个实例变量,而不是一个类(它将在所有类的实例中共享)。

class SocketHandler(tornado.websocket.WebSocketHandler):
    def __init__(self, *args, **kwargs)
        self.current_ninja_pool = enumerate(return_dependency_lvl_0())
        file_to_upload = []

        def run(self):
            item = next(self.current_ninja_pool)
            do_something_with(item)