0

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

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

这是代码:

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

我是否因为多重继承而遇到麻烦?在tipfy中编辑检索记录而不创建新记录的最佳方法是什么?

4

1 回答 1

1

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

class PersonEditHandler(RequestHandler, Jinja2Mixin): 
    person = None

这样,当您访问self.person从未在特定实例上设置的 a时self,它将遵循该类,您将获得None所需的;当您设置 self.person时,它将根据需要将其设置在实体上。

一般来说,使用 mixins 进行多重继承是可以的,但它可能会导致一些模糊的问题__new__and __init__,正如你所注意到的(老实说,我不知道哪个类在抱怨在这里接收三个参数......虽然它会有所帮助,如果你显示了完整的回溯,正如我刚才建议的那样解决问题更简单;-)。

于 2010-08-01T17:04:00.030 回答