Ví dụ đa thừa kế trong Python

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

Ví dụ đa thừa kế trong Python

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

Ví dụ đa thừa kế 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

Ví dụ đa thừa kế trong Python

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

Ví dụ đa thừa kế trong 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ì?

Ví dụ đa thừa kế trong 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

________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

Ví dụ đa thừa kế trong 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

"""
 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: 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ở.

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.

Đ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.

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

Đa kế thừa hữu ích trong nhiều tình huống với tư cách là nhà phát triển, nhưng nó làm tăng đáng kể độ phức tạp của ngôn ngữ, khiến cuộc sống của cả nhà phát triển trình biên dịch và lập trình viên trở nên khó khăn hơn.