如何在Python中有效保存引用的类类型? (应用服务引擎)

时间:2013-01-15 14:48:56

标签: python google-app-engine

我想在持久的appengine模型中引用不同的类。像:

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对象。对宠物对象的持久性并不重要,我只想用类的方法定义不同的行为集。我该怎么做?

谢谢!

2 个答案:

答案 0 :(得分:1)

查看PolyModel课程。

答案 1 :(得分: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]

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