1
有時我看到的Django,首先繼承models.Model第一或非模型類?
class Foo(models.Model, NonModelCls):
pass
其他時候,我看到
class Bar(NonModelCls, models.Model):
pass
什麼是這兩個之間的區別時,我應該用每過別人呢?
有時我看到的Django,首先繼承models.Model第一或非模型類?
class Foo(models.Model, NonModelCls):
pass
其他時候,我看到
class Bar(NonModelCls, models.Model):
pass
什麼是這兩個之間的區別時,我應該用每過別人呢?
這取決於你在什麼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
,那麼它會在Bar
類中重寫Model.save
,而它得到Foo
類忽略。