Безопасно ли перезаписывать __setitem__ на полимодели устройства - PullRequest
0 голосов
/ 20 декабря 2011

Я создаю библиотеку спам-фильтров для движка приложений Google, которая использует ловушки движка приложений для изменения некоторых данных прямо перед тем, как они будут put() в хранилище данных. Для этого я создал модель, которая подклассирует класс PolyModel, который должен быть подклассом для классов, которые нужно проверить.

Но для некоторых данных в классе я хотел бы сделать кое-что, когда значение будет изменено, для чего мне придется перезаписать __setitem__. Но я считаю, что SDK использует это для определения изменений в свойствах моделей, применения фильтров и т. Д., Поэтому изменение перезаписи __setitem__ может нарушить это. Как лучше обойти это?

Ответы [ 2 ]

2 голосов
/ 20 декабря 2011

Не изменяйте __setitem__ - напишите класс пользовательских свойств , который вместо этого будет делать то, что вы хотите.

Имейте в виду, что вы не можете просто переопределить put ввашей модели, если вы хотите сделать что-то до записи, потому что сущности также могут быть сохранены с db.put.Если вы можете, вам следует избегать этого, перемещая соответствующий код в классы свойств.

2 голосов
/ 20 декабря 2011

В переопределении методов нет опасности, если вы не забудете вызвать родительский метод с помощью super. Но в вашем случае __setitem__ - неправильное место, потому что тогда каждый раз, когда создается экземпляр, он будет очищаться от спама, даже если он создан из уже очищенных значений.

Что не так, если вы делаете это явно?

filter_out_spam(obj)
obj.put()
...