我会尽量简短些,因为这很容易变成冗长的异味:
ABC之所以出现是因为它们仅在Python 2.6中引入,并且Django开发人员为Python版本支持设置了路线图(2.3支持仅在1.2中被删除)。
至于对象继承混合器,它们在Python方面要比在减少可读性方面更具Python风格。DjangoModelBase
为Model
对象使用元类,该元类实际上在初始化时分析定义的模型属性,并Model._Meta
使用字段,Meta
选项和其他属性填充。对于两种类型的模型都可以重用该框架。这也允许Django防止继承模型来覆盖抽象模型字段。
我能想到的原因还有很多,它们全都是次要的,但是它们加起来会使当前的实现变得更加Pythonic。但是,使用对象继承混合器并没有本质上的错误。