我正在为谷歌应用引擎制作一个垃圾邮件过滤器库,它使用应用引擎挂钩在put()
进入数据存储区之前修改一些数据。为此,我创建了一个继承PolyModel类的模型,希望可检查的类应该是子类。
但对于课堂上的一些数据,我想在更改值时做一些事情,为此我必须覆盖__setitem__
。但我相信sdk使用它来确定模型属性的变化,应用过滤器等,因此更改覆盖__setitem__
可能会破坏这一点。最好的方法是什么?
答案 0 :(得分:2)
如果您不忘记使用super
调用父方法,则覆盖方法没有危险。但在你的情况下,__setitem__
是错误的地方,因为每当创建实例时,它都会被垃圾邮件清除,即使它是从已经清理过的值创建的。
如果你明确地这样做会有什么问题?
filter_out_spam(obj)
obj.put()
答案 1 :(得分:2)
请勿修改__setitem__
- 写一个符合您要求的custom property class。
请记住,如果要在放置记录之前执行操作,则不能仅覆盖模型上的put
,因为实体也可以与db.put
一起存储。如果可以,您应该通过将相关代码移动到属性类中来避免这种情况。