I will try to be brief enough, as this can easily turn into a long diatribe:
There are no ABCs because they were introduced only in Python 2.6, and Django developers have a roadmap installed to support the Python version (support for 2.3 was reset only in version 1.2).
As for object-inherited mixins, they will be less Pythonic to a greater extent than just decreasing readability. Django uses a metaclass ModelBase for Model objects, which actually analyzes certain properties of the model during initialization and populates Model._meta fields, Meta parameters, and other properties. It makes sense to reuse this structure for both types of models. It also allows Django to prevent overriding the abstract fields of models by inheriting models.
There are many more reasons that I can think of, they are all insignificant in themselves, but they add to make the current implementation much more Pythonic. However, there is nothing wrong with using object-inherited mixins.
Aram Dulyan Jul 16 '10 at 13:38 2010-07-16 13:38
source share