0

我正在为谷歌应用引擎制作一个垃圾邮件过滤器库,它使用应用引擎钩子在一些数据put()进入数据存储区之前对其进行修改。为此,我创建了一个子类化 PolyModel 类的模型,希望可检查的类应该子类化。

但是对于类中的某些数据,我想在值更改时做一些事情,为此我必须覆盖__setitem__. 但我相信 sdk 使用它来确定模型属性的变化、应用过滤器等,因此更改覆盖__setitem__可能会破坏这一点。解决这个问题的最佳方法是什么?

4

2 回答 2

2

重写方法没有危险,如果您不忘记使用super. 但在你的情况下__setitem__是错误的地方,因为每次创建实例时,它都会从垃圾邮件中清除,即使它是从已经清除的值创建的。

如果你明确地这样做有什么问题?

filter_out_spam(obj)
obj.put()
于 2011-12-19T23:52:22.570 回答
2

不要修改__setitem__- 而是编写一个自定义属性类来执行您想要的操作。

请记住,put如果您想在放置记录之前执行操作,则不能只覆盖模型,因为实体也可以使用db.put. 如果可以,您应该通过将相关代码移动到属性类中来避免这样做。

于 2011-12-20T02:57:23.090 回答