class A:
    def f1(self):
        print('A,f1')
    def f3(self):
        print('A,f3')

class B(A):
    def f1(self):
        print('B.f1')
    def f4(self):
        print('B.f4')

class C1(B):
    def f1(self):
        print('C1.f1')

    def f2(self):
        print('C1.f2')

class C2(A):
    def f1(self):
        print('C2.f1')
    def c2(self):
        self.f1()

class D(C1,C2):
    def d1(self):
        print('D.d1')

    def d2(self):
        print('D.d2')

    def f1(self):    #方法的重写,这样可以不继承父类的同名方法
        super(D,self).f1()    #但如果想调用父类同名方法,可以在前面super
        C1.f1(self)    #调用父类同名方法,也可以用写父类名.方法名(self)方式
        C2.f1(self)
        print('D.f1')

obj = D()
obj.d1()
print('1=================================================')
obj.d2()
print('2=================================================')
obj.f1()    #声明D类时,父类C1比父类C2写在前面,所以C1、C2都有f1方法情况下,先调用C1的
print('3=================================================')
obj.c2()
#C2是D的其中一个父类,且c2这个方法只有C2类才有,所以调用c2方法时是找到了C2类里的c2方法
#C2类里c2方法调用了self.f1(),这里的self是指调用对象obj本身而不是C2这个类,所以调用的是D下的f1方法而不是C2下的f1方法,所以输出结果不是C2.f1
print('4=================================================')
obj.f3()
print('5=================================================')
obj.f4()

输出:

D.d1
1=================================================
D.d2
2=================================================
C1.f1
C1.f1
C2.f1
D.f1
3=================================================
C1.f1
C1.f1
C2.f1
D.f1
4=================================================
A,f3
5=================================================
B.f4

posted on 2021-12-08 21:17  csy113  阅读(19)  评论(0编辑  收藏  举报