菱形继承问题

Posted roc-atlantis

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了菱形继承问题相关的知识,希望对你有一定的参考价值。

#coding:utf-8  # python2中指定文件头
‘‘‘
1、菱形继承
当一个子继承多个父类时,多个父类最终继承了同一个类,称之为菱形继承

2、菱形继承的问题:
python2区分经典类与新式类,如果子的继承是一个菱形继承,那么经典类与形式的区别为?
经典类下查找属性:深度优先查找
深度查找:比如A(B,C,D),深度查找就是A沿着B一路查找下去,直到世界尽头(最后一个父类),
然后才会跳到C查找,找到最后再跳到C
新式类下查找属性:广度优先查找
A(B,C,D)沿着A-B 不插着最后一个,直接跳到B,不着最后一个,跳到C,查找到最后。


3.父类又称为基类,超类。
非菱形继承查找方式有两种,都是从下往上找 子类 --》 父类--》父类
‘‘‘

class G(object):
# def test(self):
# print(‘from G‘)
pass

class E(G):
# def test(self):
# print(‘from E‘)
pass

class B(E):
# def test(self):
# print(‘from B‘)
pass

class F(G):
# def test(self):
# print(‘from F‘)
pass

class C(F):
# def test(self):
# print(‘from C‘)
pass

class D(G):
# def test(self):
# print(‘from D‘)
pass

class A(B,C,D):
def test(self):
print(‘from A‘)
# pass

obj=A()
print(A.mro()) # 查找顺序(很重要)
# [<class ‘__main__.A‘>, <class ‘__main__.B‘>, <class ‘__main__.E‘>, <class ‘__main__.C‘>,
# <class ‘__main__.F‘>, <class ‘__main__.D‘>, <class ‘__main__.G‘>, <class ‘object‘>]
# obj.test() #A->B->E-C-F-D->G-object

























































以上是关于菱形继承问题的主要内容,如果未能解决你的问题,请参考以下文章

C++菱形继承问题与虚拟继承原理

C++菱形继承

C++之继承总结(继承的定义与格式,赋值转换,默认成员函数,菱形继承及菱形虚拟继承)

Python菱形继承的初始化问题和继承顺序

C++-继承-菱形继承-菱形虚拟继承-虚函数表

菱形继承问题