切换顺序会中断初始化吗?

2024-10-08 21:22:43 发布

您现在位置:Python中文网/ 问答频道 /正文

这来自Django应用程序,在自定义表单中使用多重继承:

from django import forms

class CommonForm(forms.ModelForm):
    class Meta:
        model = MyModel

    def __init__(self, request, *args, **kwargs):
        print 'CommonForm.__init__'
        super(CommonForm, self).__init__(request, *args, **kwargs)
        print 'CommonForm.__init__ FINISHED'
        self._request = request

class MyMixin(object):
    def __init__(self, *args, **kwargs):
        print 'MyMixin.__init__'
        super(MyMixin, self).__init__(*args, **kwargs)
        print 'MyMixin.__init__ FINISHED'

class CustomForm(CommonForm, MyMixin):
    def __init__(self, request, *args, **kwargs):
        print 'CustomForm.__init__'
        super(CustomForm, self).__init__(request, *args, **kwargs)
        print 'CustomForm.__init__ FINISHED'

# weird initialization:
frm = CustomForm(http_request)

# outputs:
CustomForm.__init__
CommonForm.__init__
CommonForm.__init__ FINISHED
CustomForm.__init__ FINISHED

什么会导致MyMixin.__init__被跳过 没有错误消息,没有引发异常,没有任何

如果我将类继承的顺序切换为

class CustomForm(MyMixin, CommonForm):

所有初始值设定项都会按预期突然调用:

frm = CustomForm(http_request)

CustomForm.__init__
MyMixin.__init__
CommonForm.__init__
CommonForm.__init__ FINISHED
MyMixin.__init__ FINISHED
CustomForm.__init__ FINISHED

有人能解释一下这是怎么回事吗


Tags: selfinitrequestdefargsformskwargsclass
1条回答
网友
1楼 · 发布于 2024-10-08 21:22:43

我不知道为什么会发生这种情况,但我知道在使用多重继承时不应该使用super(),而应该:

    CommonForm.__init__(request, *args, **kwargs)
    MyMixin.__init__(*args, **kwargs)

这里有一个很好的例子:http://www.python-course.eu/python3_multiple_inheritance.php

相关问题 更多 >

    热门问题