一、单继承(只继承一个父类,父类没有继承其他父类)
class A(object):
def __init__(self):
print("i am class A")
class C(A):
def __init__(self):
super(C, self).__init__()
print('yes')
# super(C, self).__init__(),这句话的解释是:
# C是类,self是C的一个实例,super把self转化为父类A的一个实例对象,然后去使用init()方法
c = C()
i am class A
yes
二、多重继承(父类也是继承了对象的类的)
class A(object):
def __init__(self):
print('i am class A')
class B(A):
def __init__(self):
super(B, self).__init__()
print('i am class B')
class C(B):
def __init__(self):
super(C, self).__init__()
print('yes')
c = C()
i am class A
i am class B
yes
总结:上面每一级super函数只是调用上一级的父类函数而已,所以C调用的是B的init函数,然后如果B的类里面也调用了A的init函数,就会先执行。
三、多继承(继承多个单独的类,不是多级的关系)
class A(object):
def __init__(self):
print("i am class A")
def foo(self):
print("i am another A")
class B(object):
def __init__(self):
print('i am class B')
def foo(self):
print("i am another B")
class C(A, B):
def __init__(self):
super(C, self).__init__()
print('yes')
c = C()
c.foo()
i am class A
yes
i am another A
总结:结果是继承了A的属性,然后调用时先调用了A的函数,然后使用实例调用foo函数,打印出来的也是A的foo方法,如果我们写成class C(B, A),则会先调用B的属性。