回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p><strong>背景</strong></p>
<p>我正试图(通过mixins)合并2个第三方应用程序表单类,但出现了这个错误</p>
<pre><code>__init__() got multiple values for keyword argument 'user'
</code></pre>
<p>这是我班的MRO</p>
<pre><code><class 'account.forms.EmailAddForm'>,
<class 'djangular.forms.angular_model.NgModelFormMixin'>,
<class 'djangular.forms.angular_validation.NgFormValidationMixin'>,
<class 'djangular.forms.angular_base.NgFormBaseMixin'>,
<class 'allauth.account.forms.AddEmailForm'>,
<class 'allauth.account.forms.UserForm'>,
<class 'django.forms.forms.Form'>,
<class 'django.forms.forms.NewBase'>,
<class 'django.forms.forms.BaseForm'>,
<type 'object'>
</code></pre>
<p>这些是每个类的<code>__init__</code>方法的签名</p>
<pre><code>class NgModelFormMixin(NgFormBaseMixin):
def __init__(self, data=None, *args, **kwargs):
...
class NgFormValidationMixin(NgFormBaseMixin):
def __init__(self, *args, **kwargs):
...
class NgFormBaseMixin(object):
def __init__(self, data=None, *args, **kwargs):
...
class NgFormBaseMixin(object):
def __init__(self, data=None, *args, **kwargs):
...
class AddEmailForm(UserForm):
...
class UserForm(forms.Form):
def __init__(self, user=None, *args, **kwargs):
self.user = user
super(UserForm, self).__init__(*args, **kwargs)
class BaseForm(object)
def __init__(self, data=None, files=None, auto_id='id_%s', prefix=None,
initial=None, error_class=ErrorList, label_suffix=None,
empty_permitted=False):
...
</code></pre>
<p><strong>问题</p>
<p>有没有一种方法可以解决这个问题,而不必使用monkey修补<code>UserForm.__init__</code>方法?你知道吗</p>
<p><strong>编辑</p>
<p>抱歉,我应该提到我理解导致错误的原因-在<code>UserForm.__init__</code>方法签名中显式使用<code>user=None</code>。这是第三方应用程序中包含的逻辑。你知道吗</p>