码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-02-12 18:55:15      阅读:95      评论:0      收藏:0      [点我收藏+]

标签:多个   方法   elf   查找   经典   写法   pre   广度   image   

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中类的多继承的搜索算法

标签:多个   方法   elf   查找   经典   写法   pre   广度   image   

原文地址:https://www.cnblogs.com/yangzhen-ahujhc/p/12299979.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!