- Kế thừa là gì?
- Ưu điểm của thừa kế
- Thực hiện kế thừa trong Python
- Kế thừa đơn trong Python
- Kế thừa đa cấp
- Đa thừa kế
- Điều gì xảy ra nếu cả hai lớp cha có một phương thức có cùng tên?
- Constructor trong thừa kế
- Chúng ta có thể gọi hàm tạo siêu hạng từ hàm tạo của lớp con không?
Thừa kế, nói chung, là việc chuyển tài sản cho ai đó. Trong các ngôn ngữ lập trình, khái niệm kế thừa đi kèm với các lớp
- Tạo các lớp mới từ các lớp đã tồn tại được gọi là kế thừa
- Lớp hiện có được gọi là siêu lớp hoặc lớp cơ sở hoặc lớp cha
- Lớp mới được gọi là lớp con hay lớp dẫn xuất hay lớp con
- Kế thừa cho phép các lớp con kế thừa các biến, phương thức và hàm tạo của siêu lớp của chúng
- Ưu điểm chính của kế thừa là khả năng sử dụng lại mã
- Thời gian dành cho phát triển ứng dụng sẽ ít hơn
- Dự phòng [lặp lại] của mã có thể được giảm
Khi khai báo lớp con, chúng ta cần chuyển tên siêu lớp vào dấu ngoặc đơn của lớp con
Chương trình. Triển khai kế thừa [demo1. py]
class One: def m1[self]: print["Parent class m1 method"] class Two[One]: def m2[self]: print["Child class m2 method"] c = Two[] c.m1[] c.m2[]
đầu ra
Có nhiều loại thừa kế, chúng là
- thừa kế duy nhất
- kế thừa đa cấp
- đa thừa kế
Tạo một lớp con hoặc lớp con từ một lớp cha/lớp cha duy nhất được gọi là kế thừa đơn. Biểu diễn sơ đồ của Python Single Inheritance được đưa ra bên dưới
Chương trình. Kế thừa đơn [demo2. py]
class A: def m1[self]: print["A class m1 Method"] class B[A]: def m2[self]: print["Child B is derived from A class: m2 Method"] obj=B[] obj.m1[] obj.m2[]
đầu ra
Nếu một lớp được dẫn xuất từ một lớp dẫn xuất khác thì nó được gọi là kế thừa đa cấp. Biểu diễn sơ đồ của Kế thừa đa cấp Python được đưa ra bên dưới
Chương trình. Kế thừa đa cấp [demo3. py]
class A: def m1[self]: print["Parent class A: m1 Method"] class B[A]: def m2[self]: print["Child class B derived from A: m2 Method"] class C[B]: def m3[self]: print["Child class C derived from B: m3 Method"] obj=C[] obj.m1[] obj.m2[] obj.m3[]
đầu ra
Nếu một lớp con được dẫn xuất từ nhiều lớp cha thì nó được gọi là đa kế thừa. Biểu diễn sơ đồ của Đa kế thừa được đưa ra dưới đây
Chương trình. Đa kế thừa [demo4. py]
class P1: def m1[self]: print["Parent1 Method"] class P2: def m2[self]: print["Parent2 Method"] class C[P1, P2]: def m3[self]: print["Child Method"] c=C[] c.m1[] c.m2[] c.m3[]
đầu ra
Có thể có khả năng hai lớp cha có thể chứa các phương thức có cùng tên phương thức trong cả hai lớp. Về mặt cú pháp, điều này là hợp lệ
Chương trình. Các lớp cha có cùng tên phương thức [demo5. py]
class P1: def m1[self]: print["Parent1 Method"] class P2: def m1[self]: print["Parent2 Method"] class C[P1, P2]: def m2[self]: print["Child Method"] c=C[] c.m2[]
đầu ra.
Câu trả lời cho điều này phụ thuộc vào thứ tự kế thừa của các lớp cha trong lớp con
- lớp C[P1, P2]. ===>Phương thức của lớp P1 sẽ được xem xét
- lớp C[P2, P1]. ===>Phương thức của lớp P2 sẽ được xem xét
Chương trình. bản demo5. py contd
class P1: def m1[self]: print["Parent1 Method"] class P2: def m1[self]: print["Parent2 Method"] class C[P1, P2]: def m2[self]: print["Child Method"] c=C[] c.m2[] c.m1[]
đầu ra
Chương trình. Kịch bản khác của demo5. py
class P1: def m1[self]: print["Parent1 Method"] class P2: def m1[self]: print["Parent2 Method"] class C[P2, P1]: def m2[self]: print["Child Method"] c=C[] c.m2[] c.m1[]
đầu ra
Theo mặc định, hàm tạo của siêu lớp sẽ có sẵn cho lớp con
Chương trình. demo6. py
class A: def __init__[self]: print["super class A constructor"] class B[A]: def m1[]: print["Child Class B: m1 method from B"] b=B[]
đầu ra.
Nếu cả lớp con và siêu lớp đều có hàm tạo, nếu bạn tạo một đối tượng cho lớp con thì hàm tạo của lớp con sẽ được thực thi. Trong khi tạo đối tượng cho một lớp, hàm tạo của lớp đó được ưu tiên hàng đầu
Chương trình. demo7. py
________số 8đầu ra.
Có, chúng ta có thể gọi hàm tạo siêu hạng từ hàm tạo của lớp con bằng cách sử dụng hàm super[]. super[] là một hàm được xác định trước, rất hữu ích để gọi các hàm tạo, biến và phương thức của lớp cha từ lớp con
Chương trình. demo8. py
class A: def __init__[self]: print["super class A constructor"] class B[A]: def __init__[self]: print["Child class B constructor"] super[].__init__[] b=B[]
đầu ra
Trong bài viết tiếp theo, tôi sẽ thảo luận về Thứ tự giải quyết phương pháp [MRO] trong Python. Ở đây, trong bài viết này, tôi cố gắng giải thích Tính kế thừa trong Python bằng các ví dụ. Tôi hy vọng bạn thích bài viết Kế thừa trong Python với các ví dụ này. Tôi muốn có phản hồi của bạn. Vui lòng gửi phản hồi, câu hỏi hoặc nhận xét của bạn về bài viết này