python中类的多继承的搜索算法

Posted 风雪泪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中类的多继承的搜索算法相关的知识,希望对你有一定的参考价值。

1、Python的类可以继承多个类,Java和C#中则只能继承一个类

2、Python的类如果继承了多个类,那么其寻找方法的方式有两种,分别是:深度优先广度优先

  • 当类是经典类时,多继承情况下,会按照深度优先方式查找
  • 当类是新式类时,多继承情况下,会按照广度优先方式查找

经典类和新式类,从字面上可以看出一个老一个新,新的必然包含了跟多的功能,也是之后推荐的写法,从写法上区分的话,如果 当前类或者父类继承了object类,那么该类便是新式类,否则便是经典类。

 

class D:

    def bar(self):
        print \'D.bar\'


class C(D):

    def bar(self):
        print \'C.bar\'


class B(D):

    def bar(self):
        print \'B.bar\'


class A(B, C):

    def bar(self):
        print \'A.bar\'

a = A()
# 执行bar方法时
# 首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中么有,则继续去D类中找,如果D类中么有,则继续去C类中找,如果还是未找到,则报错
# 所以,查找顺序:A --> B --> D --> C
# 在上述查找bar方法的过程中,一旦找到,则寻找过程立即中断,便不会再继续找了
a.bar()
class D(object):

    def bar(self):
        print \'D.bar\'


class C(D):

    def bar(self):
        print \'C.bar\'


class B(D):

    def bar(self):
        print \'B.bar\'


class A(B, C):

    def bar(self):
        print \'A.bar\'

a = A()
# 执行bar方法时
# 首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中么有,则继续去C类中找,如果C类中么有,则继续去D类中找,如果还是未找到,则报错
# 所以,查找顺序:A --> B --> C --> D
# 在上述查找bar方法的过程中,一旦找到,则寻找过程立即中断,便不会再继续找了
a.bar()

新式类多继承

经典类:首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中么有,则继续去D类中找,如果D类中么有,则继续去C类中找,如果还是未找到,则报错

新式类:首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中么有,则继续去C类中找,如果C类中么有,则继续去D类中找,如果还是未找到,则报错

注意:在上述查找过程中,一旦找到,则寻找过程立即中断,便不会再继续找了

以上是关于python中类的多继承的搜索算法的主要内容,如果未能解决你的问题,请参考以下文章

Python rest-framework 中类的继承关系(as_view)

python中类和对象的创建以及继承的实现

Python中类的声明,使用,属性,实例属性,计算属性及继承,重写

Python中类的内置方法与继承关系实例

Python中类的定制

java中类继承,到底继承了什么?