1.不帶參數的多重繼承
class A(object):
def show_x(self):
print('A')
class B(object):
def show_y(self):
print('B')
class C(object):
def show_z(self):
print('C')
class D(A, B, C):
pass
# 測試
if __name__ == '__main__':
d = D()
d.show_x() # A
d.show_y() # B
d.show_z() # C
2. 帶參數的多重繼承
class A(object):
def __init__(self, x=0):
self._x = x
def show_x(self):
print(self._x)
def show_name(self):
print('A')
class B(object):
def __init__(self, y=0):
self._y = y
def show_y(self):
print(self._y)
def show_name(self):
print('B')
class C(object):
def __init__(self, z=0):
self._z = z
def show_z(self):
print(self._z)
def show_name(self):
print('C')
# 注意下面兩類D、E,都是繼承A、B、C,且A類的優先級最高。但是三條__init__語句的順序是相反的
class D(A, B, C):
def __init__(self, x=0, y=0, z=0):
C.__init__(self, z) # init C
B.__init__(self, y) # init B
A.__init__(self, x) # init A (A最優先)
class E(A, B, C):
def __init__(self, x=0, y=0, z=0):
super(E, self).__init__(x) # init A (A最優先) # 此句可簡寫成:super().__init__(x)
super(A, self).__init__(y) # init B
super(B, self).__init__(z) # init C
# 測試
if __name__ == '__main__':
d = D(1,2,3)
d.show_x() # 1
d.show_y() # 2
d.show_z() # 3
d.show_name() # A
e = E(1,2,3)
e.show_x() # 1
e.show_y() # 2
e.show_z() # 3
e.show_name() # A