Другой способ - использовать композицию (обычно лучшую альтернативу наследованию). например,
class MyModel(db.Model): pass
# Avoiding inheritance.
class MyWrapper(object):
def __init__(self, my_model):
# The leading _ indicates that methods in this class should
# access self._my_model.
self._my_model = my_model
Многие сочли бы это ненужным косвенным указанием, и я не виню этих людей. Тем не менее, это может быть хорошо, если вы хотите ограничить MyModel
экземпляры способом, который не поддерживается параметром validator
в db.Property
. Э.Г.
class MyModel(db.Model):
# f(x, y, z) = 0
x = db.FloatProperty()
y = db.FloatProperty()
z = db.FloatProperty()
Обеспечение ограничения без помощи MyWrapper
будет сложнее.
Другая причина использования обертки заключается в том, что вы хотите реализовать собственную схему кэширования, хотя ndb
решает эту проблему в более общем виде. Когда MyModel
можно манипулировать только через MyWrapper
, тогда вы можете контролировать возможные мутации. Затем вы можете по мере необходимости аннулировать записи в кэше.