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 Show
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 PythonBâ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ì?Khi bạn kế thừa một lớp con từ nhiều lớp cơ sở, tình huống đó được gọi là Đa kế thừa. Tuy nhiên, nó thể hiện hành vi giống như kế thừa đơn lẻ.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 đè
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ì?Khi bạn kế thừa một lớp từ lớp dẫn xuất, thì nó được gọi là kế thừa đa cấp. Và, nó có thể tăng lên bất kỳ cấp độ nào trong PythonTrong 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
Dưới đây là một minh họa đơn giản mô tả kế thừa đa cấp class parent: pass class child(parent): pass class next_child(child): pass 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
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ấpSự khác biệt chính giữa Kế thừa đa cấp và đa cấp như sau
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
Ví dụ MRO cơ bản________số 8_______Đây là kết quả Creating Node Ví dụ MRO với nhiều kế thừaName: 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 PythonPython 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 Đa kế thừa trong Python với ví dụ là gì?nếu lớp C kế thừa từ P thì tất cả các lớp con của C cũng kế thừa từ P. Khi một lớp được dẫn xuất từ nhiều hơn một lớp cơ sở thì nó được gọi là Đa kế thừa. Lớp dẫn xuất kế thừa tất cả các tính năng của trường hợp cơ sở.
Đa kế thừa với ví dụ là gì?Đa kế thừa là một tính năng của C++ khi một lớp có thể kế thừa từ nhiều lớp . Các hàm tạo của các lớp kế thừa được gọi theo cùng thứ tự mà chúng được kế thừa. Ví dụ, trong chương trình sau, hàm tạo của B được gọi trước hàm tạo của A.
Bạn có thể có nhiều kế thừa trong Python 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.
Kế thừa đa cấp hoạt động như thế nào trong 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. |