背景
我正试图(通过mixins)合并2个第三方应用程序表单类,但出现了这个错误
__init__() got multiple values for keyword argument 'user'
这是我班的MRO
<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'>
这些是每个类的__init__
方法的签名
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):
...
问题
有没有一种方法可以解决这个问题,而不必使用monkey修补UserForm.__init__
方法?你知道吗
编辑
抱歉,我应该提到我理解导致错误的原因-在UserForm.__init__
方法签名中显式使用user=None
。这是第三方应用程序中包含的逻辑。你知道吗
问题是函数定义打乱了位置参数的顺序。在所有子类和父类中,
data
是第一个位置参数。在UserForm
中,data
仍然是第一个位置参数,但它由user
参数捕获。如果user
也包含在关键字参数中,则会出现该错误。你知道吗一个简单的解决方案是只使用关键字参数。这样就不会有位置参数与关键字参数冲突。你知道吗
如果这超出了您的控制范围,您可以重写
__init__
方法并将所有位置参数映射到它们相应的关键字参数。你知道吗似乎您在*args中简单地传递了user参数,或在UserForm中传递了**kwargs参数。你知道吗
相关问题 更多 >
编程相关推荐