App引擎Python NDB map_async使用回调,对象和继承模式

时间:2014-01-12 16:48:24

标签: python google-app-engine inheritance callback app-engine-ndb

我有一个Parser类,它有解析文档的方法。解析器就像解析器函数的“容器”。现在,Parser还包含一个NDB map_async回调函数,用于将其他参数传递给回调函数。

Class P为每个映射的doc实体都有一个实例,它使用单个Parser实例来解析doc。

class P (object):

    def __init__(self, parser, ...):
        self.parser = parser
        ....

    def get_content(...)
        ....             # using methods from P and self.parser 

    def other methods ...
        ....             # using methods from P and self.parser

class Parser(object):

    def __init__(args)
        ....

    def some parser methods()
        ....

    def callback(entity):   # Is now a method of Parser, but ....

        p = P(self, ...)
        ....
        content = p.get_content(...)
        ....

parser = Parser(...)   # initialize Parser (instance, closure)
query = Docs.query()
multi_future = query.map_async(parser.callback)
....    # process results

这种方法很好,但感觉结构不合理。

我寻找P继承自Parser的解决方案: (回调可以/应该是P的一部分)

query = Docs.query()
multi_future = query.map_async(????? P ??????)
....    # process results

1 个答案:

答案 0 :(得分:1)

我用lambda想出来了。

query = Docs.query()
multi_future = query.map_async(lambda entity: P(...).callback(entity))