我的模型组织如下。
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 ..."
如您所见,各种动物都继承自一个名为“Animal”的类。每个子类也有一个方法make_sound
。
但是,在我看来,当我调用make_sound
通用动物时,Django 抱怨Animal
对象没有方法调用make_sound
,这是有道理的,因为只有子类的对象Animal
才有方法。
我可以以某种方式告诉 Django,我可以保证子类的所有对象Animal
都具有该make_sound
方法吗?通过Java接口之类的东西?我知道 Django 文档说“不允许“隐藏”字段名称”,但我觉得覆盖方法对于继承非常重要,因此 Django 应该支持它。
我不想说得特别具体,my_animal.cat.make_sound()
因为我想笼统地对待动物对象。