混合中的重寫方法

Mixins 是一種類,用於將額外的屬性和方法混合到類中。這通常很好,因為很多次 mixin 類不會覆蓋彼此或者基類的方法。但是如果你在 mixin 中覆蓋方法或屬性,這可能會導致意外的結果,因為在 Python 中,類層次結構是從右到左定義的。

例如,參加以下類

class Mixin1(object):
    def test(self):
        print "Mixin1"

class Mixin2(object):
    def test(self):
        print "Mixin2"

class BaseClass(object):
    def test(self):
        print "Base"

class MyClass(BaseClass, Mixin1, Mixin2):
    pass

在這種情況下,Mixin2 類是基類,由 Mixin1 擴充套件,最後由 BaseClass 擴充套件。因此,如果我們執行以下程式碼片段:

>>> x = MyClass()
>>> x.test()
Base

我們看到返回的結果來自 Base 類。這可能會導致程式碼邏輯中的意外錯誤,需要考慮並記住