学无止境
我们为梦想前行!

python类的多继承

python类的多继承,Python 同样有限的支持多继承形式。多继承的类定义形如下例:

class DerivedClassName(Base1, Base2, Base3):
    <statement-1>
    .
    .
    <statement-N>

对于旧风格的类,唯一的规则是深度优先,从左到右。因此,如果在 DerivedClassName 中找不到属性,它搜索 Base1,然后(递归)基类中的 Base1,只有没有找到,它才会搜索 Base2,依此类推。

(对某些人,广度优先——在搜索 Base1 的基类之前先搜索 Base2 和 Base3 ——看起来更自然。然而,在你能弄明白与 Base2 中的一个属性名称冲突的后果之前,你需要知道 Base1 的某个特定属性实际上是定义在 Base1 的还是在其某个基类中的。深度优先规则使 Base1 的直接属性和继承的属性之间没有差别)。

对于 新风格的类,方法的解析顺序动态变化地支持合作对 super() 的调用。这种方法在某些其它多继承的语言中也有并叫做 call-next-method,它比单继承语言中的super调用更强大。

对于新风格的类,动态调整顺序是必要的,因为所有的多继承都会有一个或多个菱形关系(从最底部的类向上,至少会有一个父类可以通过多条路径访问到)。例如,所有新风格的类都继承自 object,所以任何多继承都会有多条路径到达 object。为了防止基类被重复访问,动态算法线性化搜索顺序,每个类都按从左到右的顺序特别指定了顺序,每个父类只调用一次,这是单调的(也就是说一个类被继承时不会影响它祖先的次序)。所有这些特性使得设计可靠并且可扩展的多继承类成为可能。

赞(0)
转载请注明出处链接:Pycharm » python类的多继承

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址