在tipfy中编辑现有实体的正确方法

时间:2010-07-31 17:22:08

标签: python google-app-engine web-applications multiple-inheritance tipfy

我在 tipfy 中使用 PersonEditHandler 类来编辑Person实体。我有 形成了get()和post()方法,但是当我引用 self.person 时 (为了检查 get 方法是否按键找到现有的人),我明白了 '对象没有属性'错误。

这是因为我从未在 init 方法中初始化它,因为我继承自 RequestHandler Jinja2Mixin 。但是,当我覆盖 init 时,我收到另一个错误:'TypeError: init ()正好接受1个参数(3个给定)'

以下是代码:

class PersonEditHandler(RequestHandler, Jinja2Mixin): 
    def __init__(self): 
        PersonEditHandler.__init__(self) 
        # ...or 'super(PersonEditHandler, self).__init__()' 
        self.person = None 

我因多重继承而遇到麻烦吗?哪个最好 如何在tipfy中编辑检索到的记录而不创建新记录?

1 个答案:

答案 0 :(得分:1)

我建议在前面加__init__而不是添加一个类属性:

class PersonEditHandler(RequestHandler, Jinja2Mixin): 
    person = None

这样,当您访问从未在特定实例self.person上设置的self时,它将按照该类进行,您将获得{{1} }} 如预期的;当您设置 None时,它会根据需要在实体上设置它。

一般情况下,使用mixins进行多重继承是正常的,但它会使self.person__new__出现一些模糊的问题,正如您所注意到的那样(老实说我不知道​​是什么< / em> class抱怨在这里收到三个参数...虽然如果你展示完整的追溯会有所帮助,但是我刚才建议的问题更简单; - )。