Multiple inheritance và multilevel inheritance đều là các khái niệm liên quan đến kế thừa trong lập trình hướng đối tượng, tuy nhiên có sự khác biệt về cú pháp khai báo và cách thức thực hiện kế thừa.
- Multiple inheritance: cho phép một class kế thừa các thuộc tính và phương thức từ nhiều class cha khác nhau. Cú pháp khai báo là sử dụng dấu phẩy “,” để liệt kê danh sách các class cha sau từ khóa “class”.
Ví dụ:
class A:
def foo(self):
print('A.foo')
class B:
def foo(self):
print('B.foo')
class C(A, B):
pass
c = C()
c.foo() # Output: A.foo
- Multilevel inheritance: là việc kế thừa từ một class cha và class con cùng một lúc. Nghĩa là một class con sẽ kế thừa các thuộc tính và phương thức của một class cha, và sau đó được kế thừa bởi một class khác. Cú pháp khai báo là sử dụng dấu ngoặc đơn “()” để đặt tên class cha trong khai báo class.
Ví dụ:
class A:
def foo(self):
print('A.foo')
class B(A):
pass
class C(B):
pass
c = C()
c.foo() # Output: A.foo
Về cách thức thực hiện kế thừa, multilevel inheritance sẽ có sự kế thừa được thực hiện tuần tự, từ class cha tới class con. Trong khi đó, multiple inheritance sẽ có sự kế thừa được thực hiện đồng thời từ các class cha.
Đây là một ví dụ đơn giản tiếp theo về multiple inheritance trong Python:
class A:
def method_a(self):
print("This is method_a of class A")
class B:
def method_b(self):
print("This is method_b of class B")
class C(A, B):
def method_c(self):
print("This is method_c of class C")
c = C()
c.method_a()
c.method_b()
c.method_c()
Trong ví dụ này, chúng ta định nghĩa 3 classes: A
, B
, và C
. A
và B
đều có một phương thức riêng (method_a
và method_b
), còn C
kế thừa từ cả A
và B
và cũng có một phương thức riêng (method_c
).
Khi chúng ta khởi tạo một đối tượng c
của class C
, nó có thể truy cập được đến tất cả các phương thức từ cả A
, B
và C
. Cụ thể, chúng ta gọi các phương thức này bằng cách gọi đối tượng c
kết hợp với tên phương thức tương ứng (c.method_a()
, c.method_b()
, và c.method_c()
).
Dòng class C(A, B):
có ý nghĩa định nghĩa class C
kế thừa từ cả A
và B
. Đây là cú pháp để khai báo multiple inheritance trong Python. Khi đó, C
sẽ có tất cả các thuộc tính và phương thức từ A
và B
.
Trong phương thức method_c
của class C
, chúng ta chỉ đơn giản in ra một thông báo trên màn hình. Tuy nhiên, nếu cần thiết, phương thức này có thể sử dụng các thuộc tính và phương thức của cả A
và B
.
Các phương thức method_a
và method_b
của class A
và B
cũng chỉ đơn giản in ra các thông báo trên màn hình. Tuy nhiên, chúng có thể có các chức năng phức tạp hơn tùy thuộc vào mục đích của chương trình.