2

我想在持久化应用引擎模型中引用不同的类。喜欢:

class Animal():
  def eat(self, food):
    return food - 1

class Cat(Animal):
  def eat(self, food):
    return food - 2

class Dog(Animal):
  def eat(self, food):
    return food - 3

class Person(db.Model):
  name = db.StringProperty()
  pet = Animal()

我希望能够将 Cat() 或 Dog() 实例分配为宠物,保存它并能够重新加载 Person 对象,其中引用了其中引用的原始动物类型。宠物对象的持久性并不重要,我只想用类的方法定义不同的行为集。我该怎么做呢?

谢谢!

4

2 回答 2

1

查看PolyModel类。

于 2013-01-15T14:58:12.060 回答
0

我能想到的最好的方法是一个 getter 方法(假设上面的 Animal、Cat、Dog 类):

class Person(db.Model):
  name = StringProperty()
  pet = StringProperty(choices=('cat','dog'))

  def get_pet(self):
    dict = { 'cat': Cat, 'dog': Dog }
    return dict[self.pet]

这样,我必须在另外两个地方维护可用宠物类型的列表(保存的字符串变量的选择和字符串类对的字典)。有没有更无风险和更优雅的方法来做到这一点?

于 2013-01-15T16:09:07.907 回答