Я постараюсь быть достаточно кратким, поскольку это может легко превратиться в длинную диатрибу:
ABC отсутствуют, потому что они были введены только в Python 2.6, и разработчики Django имеют план действий для поддержки версий Python (поддержка 2.3 была прекращена только в 1.2).
Что касается объектно-наследуемых миксинов, они будут менее Pythonic во многих отношениях, чем просто снижение читабельности. Django использует метакласс ModelBase
для Model
объектов, который фактически анализирует определенные свойства модели при инициализации и заполняет Model._meta
полями, Meta
параметрами и другими свойствами. Имеет смысл повторно использовать эту структуру для обоих типов моделей. Это также позволяет Django предотвращать переопределение полей абстрактной модели путем наследования моделей.
Есть еще много причин, по которым я могу придумать, все они незначительны сами по себе, но они суммируют, чтобы сделать текущую реализацию гораздо более Pythonic. Хотя нет ничего плохого в том, чтобы использовать объектно-наследуемые миксины.