【问题标题】:Multiple inheritance from abstract classes with same parent but different child? django从具有相同父级但不同子级的抽象类的多重继承? django
【发布时间】:2017-11-30 22:35:59
【问题描述】:

我读过一些线程并且知道 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

这在没有任何冲突或额外字段的情况下是否可行?

提前致谢。

【问题讨论】:

  • Django 多模型继承是 fubar。虽然您可以用足够的决心将事物组合在一起,但可以为自己省去很多麻烦并且不要使用它。 (另一方面,Python MI 工作得很好)。

标签: python django inheritance


【解决方案1】:

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

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

这是可能的,但它有一些限制,例如(覆盖父类和元类中的字段)和 Django ORM 或类的模型方式在架构上与常规 python 继承有点不同,请仔细阅读文档中提到的内容并尝试保持简单。

... 这很有用的主要用例是“混合”类:添加 一个特定的额外字段或方法到每个继承 混入。尽量保持你的继承层次结构简单和 尽可能简单,这样您就不必为工作而苦苦挣扎 找出特定信息的来源

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-20
    • 2013-01-03
    • 1970-01-01
    相关资源
    最近更新 更多