Безопасно ли перезаписывать __setitem__ на полимодели устройства?

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

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

2 ответа

Решение

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

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

filter_out_spam(obj)
obj.put()

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

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

Другие вопросы по тегам