这来自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
有人能解释一下这是怎么回事吗
我不知道为什么会发生这种情况,但我知道在使用多重继承时不应该使用super(),而应该:
这里有一个很好的例子:http://www.python-course.eu/python3_multiple_inheritance.php
相关问题 更多 >
编程相关推荐