混合中的重写方法

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 类。这可能会导致代码逻辑中的意外错误,需要考虑并记住