我想在持久的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对象。对宠物对象的持久性并不重要,我只想用类的方法定义不同的行为集。我该怎么做?
谢谢!
答案 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]
这样我就必须在另外两个地方维护可用宠物类型列表(保存的字符串变量和字符串类对的字典的选择)。是否有更无风险和优雅的方式来做到这一点?