2

永続的な 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 オブジェクトをリロードできるようにしたいと考えています。ペット オブジェクトの永続性は重要ではありません。クラスのメソッドを使用してさまざまな動作セットを定義したいだけです。どうすればいいですか?

ありがとうございました!

4

2 に答える 2

1

PolyModelクラスを確認してください。

于 2013-01-15T14:58:12.060 に答える
0

私が自分で思いつくことができる最善の方法は、ゲッターメソッドです(上記の動物、猫、犬のクラスを想定しています):

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

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

このようにして、2 つの追加の場所 (保存された文字列変数と文字列とクラスのペアの辞書の選択) で利用可能なペットの種類のリストを維持する必要があります。これを行うためのよりリスクのないエレガントな方法はありますか?

于 2013-01-15T16:09:07.907 に答える