具有相同父级但不同子级的抽象类的多重继承? django的

时间:2017-11-30 22:36:00

标签: python django inheritance

我已经阅读了几个线程,并且知道django可以有多个抽象类。但我看到的几乎所有样品都是......

class AbsOne(models.Model):
    pass
class AbsTwo(models.Model):
    pass

class AbsThree(AbsOne, AbsTwo):
    pass

但如果我有类似的东西怎么办?

class AbsOne(models.Model):
    pass

class AbsTwo(AbsOne):  // this actually inheritance AbsOne
    pass
class AbsThree(AbsOne):  // this inheritance AbsOne
    pass

如果我需要继承AbsTwo, AbsThree,但这两个也是同一父母的继承,该怎么办。

class AbsFour(AbsTwo, AbsThree):
    pass

这是否可行,没有任何冲突或额外的字段?

提前致谢。

1 个答案:

答案 0 :(得分:1)

  

就像Python的子类化一样,Django模型也可以   从多个父模型继承。请记住普通的Python   名称解析规则适用。特定的第一个基类   名称(例如Meta)出现在将使用的名称中;例如,   这意味着如果多个父类包含一个Meta类,则只有   第一个将被使用,其他所有将被忽略。

https://docs.djangoproject.com/en/1.11/topics/db/models/#multiple-inheritance

它有可能,但它有一些限制,如(在父类和元类中覆盖字段)和Django ORM或类的模型方式在体系结构上有点不同于常规的python继承,请仔细阅读文档提及并试图保持简单。

  

...这个有用的主要用例是“混入”类:添加   每个继承的类的特定额外字段或方法   混合项。尽量保持继承层次结构简单   尽可能直截了当,这样你就不必费力去工作了   出于特定信息的来源

编辑:添加了另一个引用:)