Я пытаюсь создать подкласс db.Property
и переопределить метод set для реализации таких вещей, как логика до и после установки.
Проблема в том, что __set__
вызывается непосредственно в свойстве db.Model.__init__()
во время преобразования from_entity
сущности в экземпляр (после того, как оно выходит из хранилища данных), поэтому, очевидно, логика до и после установки не должна быть названным.
class MyProperty(db.StringProperty):
def __set__(model_instance, value):
self.pre_set(value)
super(MyProperty.__set__(model_instance, value)
self.post_set(value)
class MyModel(db.Model):
foo = MyProperty()
my_model = MyModel()
my_model.put()
my_model.foo = u'A new string.' """pre/post set logic runs."""
#onload the __set__ method will be called again
loaded_model = db.get(my_model.key())
# In db.Model.__init__()
for prop in self.properties().values():
value = kwargs.get(prop.name, None) or prop.default() #or something like that
prop.__set__(self, value) """pre/post set logic also runs :("""
Как я могу различить эти два случая, не переопределяя db.Model.__init__()
? или я должен просто сделать это? Разве я не должен делать это с prop.__set__()
?