Ich habe folgenden Code aufgerufen wird.__init__ nicht für Doppel vererbten Klasse
Das Problem ist, FileFormMixin
's __init__
wird niemals aufgerufen. Wie kann ich das beheben? Ich brauche wirklich alle von ihnen. Im Moment werden nur die Konstruktoren FilterForm
und NewEntityForm
ausgeführt.
UPDATE
So, sah ich alle Klassen erwähnt __init__
‚s, und sie rufen super()!
FileFormMixin
:
class FileFormMixin(object):
def __init__(self, *args, **kwargs):
super(FileFormMixin, self).__init__(*args, **kwargs)
BetterForm
:
class BetterBaseForm(object):
...
def __init__(self, *args, **kwargs):
self._fieldsets = deepcopy(self.base_fieldsets)
self._row_attrs = deepcopy(self.base_row_attrs)
self._fieldset_collection = None
super(BetterBaseForm, self).__init__(*args, **kwargs)
class BetterForm(with_metaclass(BetterFormMetaclass, BetterBaseForm),
forms.Form):
__doc__ = BetterBaseForm.__doc__
Mehr davon, Druck Klasse MRO als @ elwin-arens vorgeschlagen, ergibt folgende Ausgabe:
filter form __init__ NewEntityForm.__mro__ (<class 'myapp.forms.NewEntityForm'>, <class 'myapp.forms.FilterForm'>, <class 'form_utils.forms.BetterForm'>, <class 'django.forms.widgets.NewBase'>, <class 'form_utils.forms.BetterBaseForm'>, <class 'django.forms.forms.Form'>, <class 'django.forms.forms.BaseForm'>, <class 'django_file_form.forms.FileFormMixin'>, <class 'object'>) newsiteform __init__
Aber __init__
für FileFormMixin wird nur ausgeführt, wenn ich es explizit als @ tom-karzes rate
Vielleicht hinzufügen, warum der Auftrag Swap, um MRO zu ändern ist ohne Änderung - wie hingewiesen, kann es andere Probleme verursachen. Ich verstehe, das ist, weil das betterforms-Modul, das nicht die Super-Methode im Mixed-in-Class-Initialisierer aufruft, nicht erwartet wird, dass es änderbar ist (Third Party Code), oder? – Dilettant
siehe aktualisierte Frage – user37741
Swapping Klassen Reihenfolge löste das Problem. Vielen Dank! – user37741