Kế thừa là một khía cạnh quan trọng của mô hình hướng đối tượng. Kế thừa cung cấp khả năng sử dụng lại mã cho chương trình vì chúng ta có thể sử dụng một lớp hiện có để tạo một lớp mới thay vì tạo nó từ đầu
Trong kế thừa, lớp con có được các thuộc tính và có thể truy cập tất cả các thành viên dữ liệu và chức năng được xác định trong lớp cha. Một lớp con cũng có thể cung cấp cách triển khai cụ thể của nó cho các chức năng của lớp cha. Trong phần này của hướng dẫn, chúng ta sẽ thảo luận chi tiết về thừa kế
Trong python, một lớp dẫn xuất có thể kế thừa lớp cơ sở bằng cách chỉ cần nhắc đến cơ sở trong dấu ngoặc sau tên lớp dẫn xuất. Xem xét cú pháp sau để kế thừa một lớp cơ sở vào lớp dẫn xuất
cú pháp
Một lớp có thể kế thừa nhiều lớp bằng cách đề cập tất cả chúng bên trong dấu ngoặc. Hãy xem xét cú pháp sau
cú pháp
ví dụ 1
đầu ra
dog barking Animal Speaking
Kế thừa đa cấp Python
Có thể kế thừa đa cấp trong python giống như các ngôn ngữ hướng đối tượng khác. Kế thừa đa cấp được lưu trữ khi một lớp dẫn xuất kế thừa một lớp dẫn xuất khác. Không có giới hạn về số lượng cấp độ, kế thừa đa cấp được lưu trữ trong python
Cú pháp kế thừa đa cấp được đưa ra dưới đây
cú pháp
Thí dụ
đầu ra
dog barking Animal Speaking Eating bread...
Đa kế thừa Python
Python cung cấp cho chúng ta sự linh hoạt để kế thừa nhiều lớp cơ sở trong lớp con
Cú pháp để thực hiện đa thừa kế được đưa ra dưới đây
cú pháp
Thí dụ
đầu ra
Phương thức issubclass[sub,sup]
Phương thức issubclass[sub, sup] được sử dụng để kiểm tra mối quan hệ giữa các lớp được chỉ định. Nó trả về true nếu lớp đầu tiên là lớp con của lớp thứ hai và sai nếu ngược lại
Xem xét ví dụ sau
Thí dụ
đầu ra
Phương thức isinstance [obj, class]
Phương thức isinstance[] được sử dụng để kiểm tra mối quan hệ giữa các đối tượng và các lớp. Nó trả về true nếu tham số đầu tiên, i. e. , obj là thể hiện của tham số thứ hai, i. e. , tầng lớp
Xem xét ví dụ sau
Thí dụ
đầu ra
Ghi đè phương thức
Chúng tôi có thể cung cấp một số triển khai cụ thể của phương thức lớp cha trong lớp con của chúng tôi. Khi phương thức của lớp cha được định nghĩa trong lớp con với một số triển khai cụ thể, thì khái niệm này được gọi là ghi đè phương thức. Chúng ta có thể cần thực hiện ghi đè phương thức trong trường hợp cần định nghĩa khác về phương thức của lớp cha trong lớp con
Xét ví dụ sau để thực hiện ghi đè phương thức trong python
Thí dụ
đầu ra
Ví dụ thực tế về ghi đè phương thức
đầu ra
Bank Rate of interest: 10 SBI Rate of interest: 7 ICICI Rate of interest: 8
Trừu tượng hóa dữ liệu trong python
Trừu tượng hóa là một khía cạnh quan trọng của lập trình hướng đối tượng. Trong python, chúng ta cũng có thể thực hiện ẩn dữ liệu bằng cách thêm dấu gạch dưới kép [___] làm tiền tố cho thuộc tính cần ẩn. Sau này, thuộc tính sẽ không hiển thị bên ngoài lớp thông qua đối tượng
Trong hướng dẫn này, chúng tôi sẽ mô tả khái niệm Đa kế thừa Python và giải thích cách sử dụng nó trong các chương trình của bạn. Chúng tôi cũng sẽ đề cập đến kế thừa đa cấp, hàm super[] và tập trung vào thứ tự giải quyết phương thức
Trong hướng dẫn trước, chúng ta đã tìm hiểu về Lớp Python và Kế thừa [đơn] của Python< . Ở đó, bạn đã thấy rằng một lớp con kế thừa từ một lớp cơ sở. Tuy nhiên, Đa kế thừa là một tính năng trong đó một lớp có thể lấy các thuộc tính và phương thức từ nhiều lớp cơ sở. Do đó, nó tạo ra mức độ phức tạp và mơ hồ cao và được gọi là vấn đề kim cương trong thế giới kỹ thuật. Chúng tôi sẽ giải quyết vấn đề này sau trong hướng dẫn này. . There, you have seen that a child class inherits from a base class. However, Multiple Inheritance is a feature where a class can derive attributes and methods from more than one base classes. Hence, it creates a high level of complexity and ambiguity and known as the diamond problem in the technical world. We’ll be taking up this problem later in this tutorial.
Nhận thức chung về Đa kế thừa là nó “nguy hiểm” hoặc “xấu”. ” Ngoài ra, Java không cho phép Đa kế thừa, trong khi C++ thì có. Tuy nhiên, Python đưa ra một cách tiếp cận hoàn thiện và được thiết kế tốt để giải quyết vấn đề Đa kế thừa
Giải thích về đa kế thừa trong Python
Bây giờ chúng ta hãy cố gắng hiểu chủ đề một cách chi tiết
nội dung
Vui lòng xem kỹ từng phần để hiểu các khái niệm OOP này từ trong ra ngoài
Đa kế thừa là gì?
Cú pháp Đa thừa kế cũng tương tự như đơn thừa kế. Nhân tiện, trong Đa kế thừa, lớp con yêu cầu các thuộc tính và phương thức của tất cả các lớp cha
Trong Python, các dự án và gói tuân theo một nguyên tắc gọi là DRY, tôi. e. , đừng lặp lại chính mình. Và Kế thừa lớp là một cách tuyệt vời để thiết kế một lớp sử dụng lại các tính năng của một lớp khác mà vẫn KHÔ
Ví dụ đa kế thừa Python cơ bản
""" Desc: Python program to demonstrate the diamond problem [a.k.a. Multiple Inheritance] """ # Parent class 1 class TeamMember[object]: def __init__[self, name, uid]: self.name = name self.uid = uid # Parent class 2 class Worker[object]: def __init__[self, pay, jobtitle]: self.pay = pay self.jobtitle = jobtitle # Deriving a child class from the two parent classes class TeamLeader[TeamMember, Worker]: def __init__[self, name, uid, pay, jobtitle, exp]: self.exp = exp TeamMember.__init__[self, name, uid] Worker.__init__[self, pay, jobtitle] print["Name: {}, Pay: {}, Exp: {}".format[self.name, self.pay, self.exp]] TL = TeamLeader['Jake', 10001, 250000, 'Scrum Master', 5]
đầu ra là
Name: Jake, Pay: 250000, Exp: 5
Ví dụ về các phương thức ghi đè
Khi bạn định nghĩa một phương thức của lớp cha ở lớp con, thì quá trình này được gọi là Ghi đè
Nói cách khác, một lớp con có thể ghi đè các phương thức của lớp cha hoặc lớp cha của nó bằng cách định nghĩa một hàm có cùng tên
Tuy nhiên, có một số quy tắc để ghi đè
- Tên của phương thức phải giống nhau và các tham số của nó cũng vậy
- Nếu phương thức của lớp cha là riêng tư [được bắt đầu bằng hai dấu gạch dưới], thì bạn không thể ghi đè lên nó
Trong Python, bạn có thể sử dụng phương thức super[] để ghi đè. Nó có cú pháp sau
# Override using the super[] method super[class_name, self].override_method_name[]
Kiểm tra ví dụ dưới đây
""" Desc: Python program to demonstrate overriding using the super[] method """ class base[object]: def base_func[self]: print['Method of base class'] class child[base]: def base_func[self]: print['Method of child class'] super[child, self].base_func[] class next_child[child]: def base_func[self]: print['Method of next_child class'] super[next_child, self].base_func[] obj = next_child[] obj.base_func[]
Kết quả là
Method of next_child class Method of child class Method of base class
Kế thừa đa cấp là gì?
Trong kế thừa đa cấp, các thuộc tính của lớp cha và lớp con có sẵn cho lớp mới
Thừa kế đa cấp giống như mối quan hệ giữa ông, cha và con. Bạn có thể cảm nhận nó trong các ví dụ dưới đây
- Một chiếc xe bắt nguồn từ chiếc xe, bản thân nó thuộc về lớp ô tô
- Biến tần AC là một lớp con của lớp AC, liên quan đến lớp cha Appliance
Dưới đây là một minh họa đơn giản mô tả kế thừa đa cấp
________số 8_______Bạn có thể quan sát những điều sau đây bằng cách nhìn vào đoạn mã trên
- Lớp con là dẫn xuất của lớp cha
- Lớp next_child là dẫn xuất của lớp con
Ví dụ kế thừa đa cấp Python
""" Desc: Python program to demonstrate multilevel inheritance """ class Team: def show_Team[self]: print["This is our Team:"] # Testing class inherited from Team class Testing[Team]: TestingName = "" def show_Testing[self]: print[self.TestingName] # Dev class inherited from Team class Dev[Team]: DevName = "" def show_Dev[self]: print[self.DevName] # Sprint class inherited from Testing and Dev classes class Sprint[Testing, Dev]: def show_parent[self]: print["Testing :", self.TestingName] print["Dev :", self.DevName] s1 = Sprint[] # Object of Sprint class s1.TestingName = "James" s1.DevName = "Barter" s1.show_Team[] s1.show_parent[]
đầu ra là
This is our Team: Testing : James Dev : Barter
Đa kế thừa Python so với. Kế thừa đa cấp
Sự khác biệt chính giữa Kế thừa đa cấp và đa cấp như sau
- Đa kế thừa biểu thị một kịch bản khi một lớp xuất phát từ nhiều lớp cơ sở
- Kế thừa đa cấp có nghĩa là một lớp xuất phát từ một lớp con làm cho lớp con đó trở thành lớp cha cho lớp mới
- Đa kế thừa phức tạp hơn và do đó không được sử dụng rộng rãi
- Kế thừa đa cấp là một trường hợp điển hình hơn và do đó được sử dụng thường xuyên
- Đa kế thừa có hai lớp trong hệ thống phân cấp, i. e. , một lớp cơ sở và lớp con của nó
- Kế thừa đa cấp yêu cầu ba cấp lớp, tôi. e. , lớp cơ sở, lớp trung gian và lớp con
Thứ tự giải quyết phương pháp [MRO]
Thứ tự giải quyết phương thức [MRO] là một cách tiếp cận mà ngôn ngữ lập trình thực hiện để giải quyết các biến hoặc phương thức của một lớp
Python có một lớp cơ sở dựng sẵn có tên là đối tượng. Vì vậy, bất kỳ lớp dựng sẵn hoặc do người dùng định nghĩa nào khác mà bạn định nghĩa cuối cùng sẽ kế thừa từ nó
Bây giờ, hãy nói về cách thứ tự phân giải phương thức [MRO] diễn ra trong Python
- Trong trường hợp sử dụng nhiều kế thừa, thuộc tính được tra cứu đầu tiên trong lớp hiện tại. Nếu nó không thành công, thì nơi tiếp theo để tìm kiếm là trong lớp cha, v.v.
- Nếu có nhiều lớp cha, thì thứ tự ưu tiên là theo chiều sâu, theo sau là đường dẫn trái-phải, i. e. , DLR
- MRO đảm bảo rằng một lớp luôn đứng trước cha của nó và đối với nhiều cha, giữ thứ tự như bộ của các lớp cơ sở
Ví dụ MRO cơ bản
""" Desc: Python program to demonstrate how MRO resolves a method or an attribute """ class Heap: def create[self]: print[" Creating Heap"] class Node[Heap]: def create[self]: print[" Creating Node"] node = Node[] node.create[]
Đây là kết quả
Creating Node
Ví dụ MRO với nhiều kế thừa
Name: Jake, Pay: 250000, Exp: 50
Đây là đầu ra
Name: Jake, Pay: 250000, Exp: 51
Trong ví dụ này, chúng tôi đã giới thiệu Đa thừa kế, được gọi là Thừa kế kim cương hoặc Kim cương tử thần chết người
Phương thức cho Lệnh giải quyết phương thức [MRO]
Bạn có thể kiểm tra Thứ tự giải quyết phương pháp của một lớp. Python cung cấp thuộc tính __mro__ và phương thức mro[]. Với những thứ này, bạn có thể nhận được thứ tự giải quyết
Xem ví dụ bên dưới
Name: Jake, Pay: 250000, Exp: 52
Kết quả là
Name: Jake, Pay: 250000, Exp: 53
Các phương thức kế thừa tích hợp trong Python
Python cung cấp cho chúng ta hai phương thức tích hợp để kiểm tra tính kế thừa. Họ đây rồi
a. isinstance[]
Hàm isinstance[] kiểm tra một loại đối tượng. Nó trả về True hoặc False tương ứng
Name: Jake, Pay: 250000, Exp: 54
Kiểm tra ví dụ dưới đây
Name: Jake, Pay: 250000, Exp: 55
Đây là kết quả
Name: Jake, Pay: 250000, Exp: 56
b. issubclass[]
Hàm issubclass[] kiểm tra xem một lớp cụ thể có kế thừa một lớp khác hay không. Nó có cú pháp sau
Name: Jake, Pay: 250000, Exp: 57
Nó cho kết quả là True nếu lớp đã cho thực sự được dẫn xuất từ lớp cha hoặc trả về False nếu ngược lại
Name: Jake, Pay: 250000, Exp: 58
Kết quả là như sau
Name: Jake, Pay: 250000, Exp: 59
Sau khi kết thúc hướng dẫn này, bạn sẽ cảm thấy thoải mái khi sử dụng Đa kế thừa Python. Tuy nhiên, chúng tôi đã cung cấp cho bạn đủ ví dụ để bạn thực hành nhiều hơn và tự tin hơn