Trong bài viết trước, chúng ta đã thảo luận về tính kế thừa của Python. Ở đây, hướng dẫn Đa kế thừa Python, chúng ta sẽ thảo luận Đa kế thừa trong Python là gì với các ví dụ và cách sử dụng của nó
Mặt khác, chúng ta sẽ học Python MRO [Method Resolution Order]. Cuối cùng, chúng ta sẽ tìm hiểu các biến chứng trong Đa kế thừa trong ngôn ngữ lập trình Python
Vì vậy, hãy bắt đầu Hướng dẫn đa kế thừa Python
Python đa kế thừa
Đa kế thừa Python là gì?
Đúng như tên gọi của nó, đa kế thừa trong python là khi một lớp kế thừa từ nhiều lớp. Một ví dụ về điều này là một đứa trẻ thừa hưởng những đặc điểm tính cách từ cả cha lẫn mẹ.
Đa kế thừa Python - Ví dụ
Trước khi chúng tôi tiến hành nhiều cú pháp kế thừa, hãy xem cú pháp python
Cú pháp đa kế thừa Python
Để tạo một lớp kế thừa từ nhiều lớp python, chúng ta viết tên của các lớp này bên trong dấu ngoặc đơn cho lớp dẫn xuất khi định nghĩa nó
Chúng tôi phân tách các tên này bằng dấu phẩy
Mã cho ví dụ trước sẽ là
>>> class Mother: pass >>> class Father: pass >>> class Child[Mother,Father]: pass >>> issubclass[Child,Mother] and issubclass[Child,Father]
đầu ra
Thật
Python MRO [Thứ tự giải quyết phương thức]
Khi chúng tôi tìm kiếm một thuộc tính trong một lớp có liên quan đến tính kế thừa của python, một thứ tự sẽ được tuân theo
Đầu tiên, nó được tìm kiếm trong lớp hiện tại. Nếu không tìm thấy, tìm kiếm sẽ chuyển sang các lớp cha. Đây là từ trái sang phải, độ sâu đầu tiên
Vì vậy, trong lớp trên, thứ tự tìm kiếm sẽ là – Con, Mẹ, Cha, Đối tượng
Thứ tự này được gọi là tuyến tính hóa của lớp Con và tập hợp các quy tắc được áp dụng được gọi là MRO [Thứ tự giải quyết phương pháp]
Để lấy MRO của một lớp, bạn có thể sử dụng thuộc tính __mro__ hoặc phương thức mro[]
>>> Child.__mro__
đầu ra
[, , , ]
Thuộc tính __mro__ trả về một bộ, nhưng phương thức mro[] trả về một danh sách python
>>> Child.mro[]
đầu ra
[, , , ]
Để lấy một ví dụ phức tạp hơn cũng thể hiện tìm kiếm theo chiều sâu, chúng tôi lấy 6 lớp
>>> class X:pass >>> class Y: pass >>> class Z:pass >>> class A[X,Y]:pass >>> class B[Y,Z]:pass >>> class M[B,A,Z]:pass
>>> M.mro[]
đầu ra
[, , , , , , ]
Chúng ta có thể biểu diễn điều này bằng sơ đồ sau
Python Đa kế thừa – Thứ tự phân giải phương thức [MRO]
Đầu tiên, trình thông dịch quét M. Sau đó, nó quét B, rồi A-B trước do thứ tự của các đối số tại thời điểm kế thừa
Nó quét Z sau, sau X và Y. Thứ tự là- X, rồi Y, rồi Z. Điều này là do tìm kiếm theo chiều sâu, X đến trước A
Cuối cùng, nó quét đối tượng lớp. Do đó, thứ tự
Các biến chứng trong Python Đa kế thừa
Điều gì xảy ra khi các lớp mà chúng ta kế thừa đều có một thuộc tính chung?
Hãy học ba lớp A, B và C
>>> class A: id=1 >>> class B: id=2 >>> class C: id=3 >>> class M[A,C,B]: pass >>> M.id
đầu ra
1
>>> M.id
đầu ra
1
>>> class M[C,B,A]: pass >>> M.id
đầu ra
3
Như chúng ta thấy ở đây, lớp có tên đầu tiên trong thừa kế chuyển giá trị của nó cho lớp con để lấy thuộc tính chung
Trước đó, đó là A, vì vậy, M có id=1. Sau đó, khi chúng tôi đổi nó thành C, M nhận id=3. Điều này cũng tương tự với các phương thức/hàm Python của lớp
________số 8_______đầu ra
A
Vì vậy, đây là tất cả về Hướng dẫn đa kế thừa Python. Hy vọng bạn thích lời giải thích của chúng tôi về Python MRO
Câu hỏi phỏng vấn Python về đa kế thừa
- Làm thế nào để bạn đạt được đa kế thừa trong Python?
- Khi nào chúng ta nên sử dụng đa kế thừa trong Python?
- Những ưu điểm và nhược điểm của đa kế thừa Python là gì?
- Đa kế thừa Python là gì?
- Đa kế thừa Python hoạt động như thế nào?
Phần kết luận
Do đó, trong hướng dẫn này, chúng ta đã thảo luận về tính đa thừa kế của python, cú pháp và các ví dụ của nó
Chúng tôi cũng đã nói về Thứ tự giải quyết phương pháp [MRO] và lần cuối cùng chúng tôi thảo luận, các biến chứng trong nhiều kế thừa trong python