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