Tại sao Python có nhiều kế thừa?

Về bản chất, nó được gọi là đa kế thừa vì một lớp có thể kế thừa từ nhiều lớp. Đây là một khái niệm từ lập trình hướng đối tượng

Nếu bạn hoàn toàn chưa quen với lập trình [hướng đối tượng], tôi khuyên bạn nên tham gia khóa học bên dưới

khóa học liên quan. Khóa học & bài tập lập trình Python

Giới thiệu

Kế thừa là nếu một lớp con nhận được tất cả các phương thức và biến từ một siêu lớp

Các phương thức và biến kế thừa sau đó có thể được sử dụng trong một đối tượng mới được tạo từ lớp con

Trong hình trên, lớp Student kế thừa từ lớp Person

Vì vậy, phương thức

# Class
class A:
def a[self]:
print['a']

# Class B inherits from Class A
class B[A]:
def b[self]:
print['b']

# Create object
obj = B[]
B.a[]
B.b[]
6 và các biến
# Class
class A:
def a[self]:
print['a']

# Class B inherits from Class A
class B[A]:
def b[self]:
print['b']

# Create object
obj = B[]
B.a[]
B.b[]
7 và
# Class
class A:
def a[self]:
print['a']

# Class B inherits from Class A
class B[A]:
def b[self]:
print['b']

# Create object
obj = B[]
B.a[]
B.b[]
8 sẽ ở bên trong lớp Sinh viên

Nếu bạn tạo một đối tượng từ lớp Sinh viên, bạn có thể truy cập cả biến và phương thức từ Sinh viên và Người

Trong đa kế thừa, một lớp nhận tất cả các biến và phương thức từ nhiều cha

Di sản

Để tạo một lớp kế thừa từ một siêu lớp, bạn phải định nghĩa dấu ngoặc đơn trong định nghĩa lớp

class Sub[Super]:
pass

Kế thừa cơ bản được thực hiện theo cách này trong Python

# Class
class A:
def a[self]:
print['a']

# Class B inherits from Class A
class B[A]:
def b[self]:
print['b']

# Create object
obj = B[]
B.a[]
B.b[]

Bây giờ hãy tìm hiểu về đa kế thừa, kế thừa từ nhiều lớp

đa thừa kế

Vậy đa thừa kế là gì?

Trong đa kế thừa, một lớp kế thừa từ hai hoặc nhiều siêu lớp

Nó kế thừa các phương thức và biến từ tất cả các siêu lớp

Nếu bạn tạo một đối tượng, nó có tất cả các phương thức và biến từ các lớp

Hãy xem một ví dụ, trong đó một lớp kế thừa từ ba lớp

class Parent1:
pass

class Parent2:
pass

class Parent3:
pass

class Kid1[Parent1, Parent2, Parent3]:
pass

Các lớp này không có triển khai, nhưng chúng chỉ ra cách sử dụng đa kế thừa

Để tạo một lớp kế thừa từ các lớp, chỉ cần thêm chúng vào sau dấu ngoặc đơn

class Kid1[Parent1]:
class Kid1[Parent1, Parent2]:
class Kid1[Parent1, Parent2, Parent3]:
class Kid1[Parent1, Parent2, Parent3, Parent4]:
class Kid1[Parent1, Parent2, Parent3, Parent4, Parent5]:

Hãy thêm một số biến vào các lớp

>>> class Parent1:
.. x = 1
..
>>> class Parent2:
.. y = 1
..
>>> class Parent3:
.. z = 1
..
>>> class Kid1[Parent1, Parent2, Parent3]:
.. u = 2
...

Tạo một đối tượng mới

________số 8

Tất cả các biến hiện có sẵn

>>> k.x
1
>>> k.y
1
>>> k.z
1
>>> k.u
2
>>>

Nếu bạn là người mới bắt đầu học Python, thì tôi thực sự khuyên bạn nên đọc cuốn sách này

Ví dụ về đa kế thừa

Hãy xem ví dụ đa thừa kế này

# Class
class A:
def a[self]:
print['a']

# Class B inherits from Class A
class B[A]:
def b[self]:
print['b']

# Create object
obj = B[]
B.a[]
B.b[]
0

Bạn có thể tạo một đối tượng với mọi lớp

Những biến nào sẽ có sẵn, tùy thuộc vào lớp

Hai lớp đầu không kế thừa nên chỉ có các biến đó

# Class
class A:
def a[self]:
print['a']

# Class B inherits from Class A
class B[A]:
def b[self]:
print['b']

# Create object
obj = B[]
B.a[]
B.b[]
1

Nếu bạn tạo đối tượng bằng class TeamLeader [đa kế thừa] thì nó có sẵn nhiều biến

# Class
class A:
def a[self]:
print['a']

# Class B inherits from Class A
class B[A]:
def b[self]:
print['b']

# Create object
obj = B[]
B.a[]
B.b[]
2

Các phương thức cũng có thể được kế thừa, lớp TeamLeader bên dưới kế thừa tất cả các phương thức

# Class
class A:
def a[self]:
print['a']

# Class B inherits from Class A
class B[A]:
def b[self]:
print['b']

# Create object
obj = B[]
B.a[]
B.b[]
0

Các phương thức kế thừa tích hợp trong Python

Python có một vài phương thức giúp kế thừa

Phương thức isinstance[] trả về một giá trị boolean, cho bạn biết liệu một đối tượng có phải là một thể hiện của một lớp hay không

# Class
class A:
def a[self]:
print['a']

# Class B inherits from Class A
class B[A]:
def b[self]:
print['b']

# Create object
obj = B[]
B.a[]
B.b[]
1

Phương thức issubclass[] kiểm tra xem một lớp có kế thừa từ một lớp hay không

# Class
class A:
def a[self]:
print['a']

# Class B inherits from Class A
class B[A]:
def b[self]:
print['b']

# Create object
obj = B[]
B.a[]
B.b[]
2

Nếu bạn là người mới bắt đầu học Python, thì tôi thực sự khuyên bạn nên đọc cuốn sách này

Kế thừa đa cấp

Bạn có thể thấy kế thừa đa cấp, đây không phải là đa kế thừa

Trong đa cấp có nhiều cấp tạo nên mối quan hệ kế thừa

Điều này cũng tương tự như mối quan hệ giữa ông, cha và con.

# Class
class A:
def a[self]:
print['a']

# Class B inherits from Class A
class B[A]:
def b[self]:
print['b']

# Create object
obj = B[]
B.a[]
B.b[]
3

Ở đây mỗi lớp chỉ kế thừa nhiều nhất một lần, nhưng chúng kế thừa theo chuỗi

Hai lớp này kế thừa một lần

# Class
class A:
def a[self]:
print['a']

# Class B inherits from Class A
class B[A]:
def b[self]:
print['b']

# Create object
obj = B[]
B.a[]
B.b[]
4

Đó là lý do tại sao chúng tôi gọi đây là kế thừa đa cấp

Ví dụ dưới đây cho thấy kế thừa đa cấp trong một ngữ cảnh khác

# Class
class A:
def a[self]:
print['a']

# Class B inherits from Class A
class B[A]:
def b[self]:
print['b']

# Create object
obj = B[]
B.a[]
B.b[]
5

Đa kế thừa so với kế thừa đa cấp

Có một vài điểm khác biệt chính giữa đa kế thừa và kế thừa đa cấp

  • Đa kế thừa là khi có nhiều siêu lớp

  • Đa thừa kế có thể trở nên phức tạp, do đó không được sử dụng rộng rãi. Hãy tưởng tượng kế thừa sáu lớp, những biến và phương thức nào khả dụng?

    Python có cung cấp nhiều kế thừa không?

    Python là một trong số ít ngôn ngữ lập trình hiện đại hỗ trợ đa kế thừa . Đa kế thừa là khả năng dẫn xuất một lớp từ nhiều lớp cơ sở cùng một lúc.

    Tại sao cần đa kế thừa?

    Đa kế thừa rất hữu ích khi một lớp con cần kết hợp nhiều hợp đồng và kế thừa một số hoặc tất cả việc triển khai các hợp đồng đó . Ví dụ, lớp AmericanStudent cần kế thừa từ cả lớp Student và lớp American. Nhưng đa thừa kế đặt ra những khó khăn bổ sung.

    Tại sao đa kế thừa được hỗ trợ trong Python mà không phải trong java?

    Lý do đằng sau điều này là để tránh sự mơ hồ . Hãy xem xét trường hợp lớp B mở rộng lớp A và lớp C và cả lớp A và C đều có cùng một phương thức display[]. Bây giờ trình biên dịch java không thể quyết định nên kế thừa phương thức hiển thị nào. Để ngăn chặn tình trạng như vậy, nhiều kế thừa không được phép trong java.

    Ý nghĩa của đa kế thừa trong Python là gì?

    Nếu một lớp con kế thừa các thuộc tính của một lớp khác, chúng ta gọi đó là kế thừa đơn. Tuy nhiên, nếu một lớp con kế thừa từ nhiều hơn một lớp, tôi. e. lớp con này được dẫn xuất từ ​​nhiều lớp, chúng tôi gọi nó là đa kế thừa trong Python

Chủ Đề