Questa è una domanda suggerita da another question da parte mia.Django Abstract Models vs simple Python mixins vs Python ABC
Django fornisce la funzionalità Abstract base classes (che non è uguale alle classi ABC in Python?) In modo che si possa creare un modello (modelli Django.Modello) da cui si può ereditare, ma senza che il Modello abbia una tabella effettiva nel Banca dati. Si innesca questo comportamento impostando l'attributo 'abstract' nella classe Meta del modello.
Ora la domanda: perché Django lo risolve in questo modo? Perché la necessità di questo speciale tipo di modello di "classe base astratta"? Perché non creare un mixin del modello semplicemente ereditando dalla classe dell'oggetto e mescolandolo con un modello esistente? O potrebbe anche questo compito di un Python ABC? (Si badi bene non sono molto familiarità con le classi ABC in Python, la mia ignoranza potrebbe mostrare qui)
(Contrassegnare come risposta accettata, sebbene anche Daniel sia buono, ma Aram ha ampliato un po 'di più i grintosi bit.) Ho ragione nel capire che, usando i mixin ereditari di oggetti, sarei in grado di dichiarare campi extra sul modello? Ma sarei in grado di aggiungere metodi aggiuntivi o sovrascriverli? – hopla
Sì, i mixins che ereditano oggetti possono dichiarare campi e metodi aggiuntivi. Puoi sovrascrivere i metodi assicurandoti che il tuo mix-in che eredita gli oggetti venga prima nell'elenco delle classi da cui ereditare. Tuttavia, indipendentemente dall'ordine, un mixin che eredita oggetti non può sovrascrivere un campo (non mancherà di convalidare se tenta di farlo). –