处理多重继承


1、把接口继承和实现继承区分开

  使用多重继承时,一定要 明确一开始为什么创建子类?主要原因可能有:

  • 继承接口,创建子类型,实现“是什么”关系
  • 继承实现,通过重用避免代码重复

  其实这两条经常同时出现,不过只要可能,一定要明确意图。通过继承重用代码是实现细节,通常可以换用组合和委托模式。而接口继承则是框架的支柱。

2、使用抽象基类显示表示接口

  现代的Python中,如果类的作用是定义接口,应该明确把它定义为抽象基类。Python3.4及以上版本中,我们要创建abc.ABC或其它抽象基类的子类。

3、通过混入重用代码

  如果一个类的作用是为了多个不相关的子类提供方法实现,从而实现重用,但不体现“是什么”关系,应该把那个类明确定义为混入类(mixin class)。从概念上讲,混入不定义新类型,只是打包方法,便于重用。混入类绝对不能实例化,而且具体类不能只继承混入类。混入类应该提供某方面的特定行为,只实现少量关系非常紧张的方法。

4、在名称中明确指明混入

  因为在Python中没有把类声明为混入的正规方式,所以强烈建议在名称中加入Mixin后缀。Tkinter没有采纳这个建议,如果采纳的话,XView会变成XViewMixin,Pack会变成PackMixin。

5、