有时候我会看到
class Foo(models.Model, NonModelCls):
pass
其他时候,我看到了
class Bar(NonModelCls, models.Model):
pass
两者之间有什么区别?我应该在何时使用另一个?
答案 0 :(得分:1)
这取决于NonModelCls
中的内容。属性和方法的搜索顺序是从左到右(https://docs.python.org/3/tutorial/classes.html?highlight=inheritence#multiple-inheritance)。
让我们说你有这些课程:
class A:
def __init__():
print('A')
super(A, self).__init__()
class B:
def __init__():
print('B')
super(B, self).__init__()
class C(A,B):
pass
class D(B,A):
pass
然后调用C和D将导致:
>>>C()
A
B
<__main__.C object at 0x7f51d3efe0f0>
>>>D()
B
A
<__main__.D object at 0x7f51d3efe0b8>
因此,在您的情况下,如果NonModelCls
的方法与models.Model
方法之一具有相同的名称,例如save
,那么它将覆盖Model.save
中的Bar
}},在Foo
类中被忽略。