私のモデルは次のように構成されています。
class Animal(models.Model):
first_name = models.CharField(max_length=128, unique=True)
class Cat(Animal):
def make_sound(self):
return "mreooooow"
class Dog(Animal):
def make_sound(self):
return "AARF!"
class EvilMonkey(Animal):
def make_sound(self):
return "muahahaha ..."
ご覧のとおり、さまざまな動物は「動物」と呼ばれるクラスから継承しています。各サブクラスにはメソッドもありmake_sound
ます。
しかし、私の見解ではmake_sound
、一般的な動物を呼び出すと、Djangoは、Animal
オブジェクトには、というメソッドがないと不平を言いますmake_sound
。これは、のサブクラスのオブジェクトのみがメソッドを持っているため、理にかなっていますAnimal
。
Animal
のサブクラスのすべてのオブジェクトがメソッドを持っていることを保証できることをどういうわけかDjangoに伝えることができますmake_sound
か?Javaインターフェイスのようなものを介して?Djangoのドキュメントに「フィールド名の「非表示」は許可されていません」と記載されていることは知っていますが、メソッドのオーバーライドは継承にとって非常に基本的であるため、Djangoはそれをサポートする必要があると思います。
my_animal.cat.make_sound()
動物のオブジェクトを一般的に扱いたいので、具体的に言う必要はありません。