Đa kế thừa trong ví dụ python

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 PythonKế 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ì?

Đa kế thừa trong ví dụ python
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 đè

  • 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ì?

Đa kế thừa trong ví dụ python
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 Python

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

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

  • 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

Đa kế thừa trong ví dụ python

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

________số 8_______

Đây là kết quả

Creating Node

Ví dụ MRO với nhiều kế thừa

Name: Jake, Pay: 250000, Exp: 5
0

Đây là đầu ra

Name: Jake, Pay: 250000, Exp: 5
1

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: 5
2

Kết quả là

Name: Jake, Pay: 250000, Exp: 5
3

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: 5
4

Kiểm tra ví dụ dưới đây

Name: Jake, Pay: 250000, Exp: 5
5

Đây là kết quả

Name: Jake, Pay: 250000, Exp: 5
6

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: 5
7

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: 5
8

Kết quả là như sau

Name: Jake, Pay: 250000, Exp: 5
9

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.