Nếu một lớp kế thừa từ nhiều lớp thì thứ tự kế thừa không thành vấn đề trong python

Tóm lược. trong hướng dẫn này, bạn sẽ tìm hiểu về tính đa thừa kế của Python và cách hoạt động của việc phân giải thứ tự phương thức trong Python

Giới thiệu về Python Đa kế thừa

Khi một lớp kế thừa từ một lớp duy nhất, bạn có một kế thừa duy nhất. Python cho phép một lớp kế thừa từ nhiều lớp. Nếu một lớp kế thừa từ hai lớp trở lên, bạn sẽ có nhiều lớp kế thừa

Để mở rộng nhiều lớp, bạn chỉ định các lớp cha bên trong dấu ngoặc đơn

class Car: def go[self]: print['Going']

Code language: Python [python]
7 sau tên lớp của lớp con như thế này

class ChildClass[ParentClass1, ParentClass2, ParentClass3]: pass

Code language: Python [python]

Cú pháp đa thừa kế tương tự như danh sách tham số trong định nghĩa lớp. Thay vì bao gồm một lớp cha bên trong dấu ngoặc đơn, bạn bao gồm hai hoặc nhiều lớp, được phân tách bằng dấu phẩy

Hãy lấy một ví dụ để hiểu cách hoạt động của đa thừa kế

Đầu tiên, định nghĩa một lớp

class Car: def go[self]: print['Going']

Code language: Python [python]
8 có phương thức

class Car: def go[self]: print['Going']

Code language: Python [python]
9

class Car: def go[self]: print['Going']

Code language: Python [python]

Thứ hai, định nghĩa một lớp

class Flyable: def fly[self]: print['Flying']

Code language: Python [python]
0 có phương thức

class Flyable: def fly[self]: print['Flying']

Code language: Python [python]
1

class Flyable: def fly[self]: print['Flying']

Code language: Python [python]

Thứ ba, định nghĩa

class Flyable: def fly[self]: print['Flying']

Code language: Python [python]
2 kế thừa từ cả hai lớp

class Car: def go[self]: print['Going']

Code language: Python [python]
8 và

class Flyable: def fly[self]: print['Flying']

Code language: Python [python]
0

class ChildClass[ParentClass1, ParentClass2, ParentClass3]: pass

Code language: Python [python]
1

class Flyable: def fly[self]: print['Flying']

Code language: Python [python]
2 kế thừa từ các lớp

class Car: def go[self]: print['Going']

Code language: Python [python]
8 và

class Flyable: def fly[self]: print['Flying']

Code language: Python [python]
0 nên nó sử dụng lại các phương thức từ các lớp đó. Nó có nghĩa là bạn có thể gọi các phương thức

class Car: def go[self]: print['Going']

Code language: Python [python]
9 và

class Flyable: def fly[self]: print['Flying']

Code language: Python [python]
1 trên một thể hiện của lớp

class Flyable: def fly[self]: print['Flying']

Code language: Python [python]
2 như thế này

class ChildClass[ParentClass1, ParentClass2, ParentClass3]: pass

Code language: Python [python]
8

đầu ra

class ChildClass[ParentClass1, ParentClass2, ParentClass3]: pass

Code language: Python [python]
9

Thứ tự giải quyết phương pháp [MRO]

Khi các lớp cha có các phương thức trùng tên và lớp con gọi phương thức đó, Python sẽ sử dụng thứ tự phân giải phương thức [MRO] để tìm kiếm phương thức phù hợp để gọi. Xem xét ví dụ sau

Đầu tiên, thêm phương thức

class ChildClass[ParentClass1, ParentClass2, ParentClass3]: pass

Code language: Python [python]
11 vào các lớp

class Car: def go[self]: print['Going']

Code language: Python [python]
8,

class Flyable: def fly[self]: print['Flying']

Code language: Python [python]
0 và

class Flyable: def fly[self]: print['Flying']

Code language: Python [python]
2. Trong phương thức

class ChildClass[ParentClass1, ParentClass2, ParentClass3]: pass

Code language: Python [python]
11 của lớp

class Flyable: def fly[self]: print['Flying']

Code language: Python [python]
2, hãy gọi phương thức

class ChildClass[ParentClass1, ParentClass2, ParentClass3]: pass

Code language: Python [python]
11 của lớp

class ChildClass[ParentClass1, ParentClass2, ParentClass3]: pass

Code language: Python [python]
18

class Car: def go[self]: print['Going']

Code language: Python [python]
8

Thứ hai, tạo một thể hiện của lớp

class Flyable: def fly[self]: print['Flying']

Code language: Python [python]
2 và gọi phương thức

class ChildClass[ParentClass1, ParentClass2, ParentClass3]: pass

Code language: Python [python]
11

class Car: def go[self]: print['Going']

Code language: Python [python]
1

đầu ra

class Car: def go[self]: print['Going']

Code language: Python [python]
2

Như bạn có thể thấy rõ từ đầu ra,

class ChildClass[ParentClass1, ParentClass2, ParentClass3]: pass

Code language: Python [python]
81 gọi phương thức

class ChildClass[ParentClass1, ParentClass2, ParentClass3]: pass

Code language: Python [python]
11 của lớp

class Flyable: def fly[self]: print['Flying']

Code language: Python [python]
0

Sau đây cho thấy

class ChildClass[ParentClass1, ParentClass2, ParentClass3]: pass

Code language: Python [python]
84 của lớp

class Flyable: def fly[self]: print['Flying']

Code language: Python [python]
2

class Car: def go[self]: print['Going']

Code language: Python [python]
8

đầu ra

class Car: def go[self]: print['Going']

Code language: Python [python]
0

Từ trái sang phải, bạn sẽ thấy

class Flyable: def fly[self]: print['Flying']

Code language: Python [python]
2,

class Flyable: def fly[self]: print['Flying']

Code language: Python [python]
0,

class Car: def go[self]: print['Going']

Code language: Python [python]
8 và

class ChildClass[ParentClass1, ParentClass2, ParentClass3]: pass

Code language: Python [python]
89

Lưu ý rằng các đối tượng

class Car: def go[self]: print['Going']

Code language: Python [python]
8 và

class Flyable: def fly[self]: print['Flying']

Code language: Python [python]
0 kế thừa hoàn toàn từ lớp

class ChildClass[ParentClass1, ParentClass2, ParentClass3]: pass

Code language: Python [python]
89. Khi bạn gọi phương thức

class ChildClass[ParentClass1, ParentClass2, ParentClass3]: pass

Code language: Python [python]
11 từ đối tượng của

class Flyable: def fly[self]: print['Flying']

Code language: Python [python]
2, Python sử dụng đường dẫn tìm kiếm lớp

class ChildClass[ParentClass1, ParentClass2, ParentClass3]: pass

Code language: Python [python]
84

Vì lớp

class Flyable: def fly[self]: print['Flying']

Code language: Python [python]
0 nằm cạnh lớp

class Flyable: def fly[self]: print['Flying']

Code language: Python [python]
2, nên

class ChildClass[ParentClass1, ParentClass2, ParentClass3]: pass

Code language: Python [python]
81 gọi phương thức

class ChildClass[ParentClass1, ParentClass2, ParentClass3]: pass

Code language: Python [python]
11 của lớp

class Flyable: def fly[self]: print['Flying']

Code language: Python [python]
2

Nếu đảo lộn thứ tự của lớp

class Flyable: def fly[self]: print['Flying']

Code language: Python [python]
0 và lớp

class Car: def go[self]: print['Going']

Code language: Python [python]
8 trong danh sách thì lớp

class ChildClass[ParentClass1, ParentClass2, ParentClass3]: pass

Code language: Python [python]
84 sẽ thay đổi tương ứng. Ví dụ

class Car: def go[self]: print['Going']

Code language: Python [python]
1

đầu ra

class Car: def go[self]: print['Going']

Code language: Python [python]
2

Trong ví dụ này, thay vào đó,

class ChildClass[ParentClass1, ParentClass2, ParentClass3]: pass

Code language: Python [python]
81 gọi phương thức

class ChildClass[ParentClass1, ParentClass2, ParentClass3]: pass

Code language: Python [python]
11 của lớp

class Car: def go[self]: print['Going']

Code language: Python [python]
8, dựa trên thứ tự của chúng trong giải pháp thứ tự phương thức

Đa thừa kế và siêu

Đầu tiên, thêm phương thức

class Car: def go[self]: print['Going']

Code language: Python [python]
87 vào lớp

class Car: def go[self]: print['Going']

Code language: Python [python]
8

class Car: def go[self]: print['Going']

Code language: Python [python]
3

Thứ hai, thêm phương thức

class Car: def go[self]: print['Going']

Code language: Python [python]
87 vào lớp

class Flyable: def fly[self]: print['Flying']

Code language: Python [python]
0

class Car: def go[self]: print['Going']

Code language: Python [python]
4

class Car: def go[self]: print['Going']

Code language: Python [python]
87 của các lớp

class Car: def go[self]: print['Going']

Code language: Python [python]
8 và

class Flyable: def fly[self]: print['Flying']

Code language: Python [python]
0 chấp nhận một số tham số khác nhau. Nếu lớp

class Flyable: def fly[self]: print['Flying']

Code language: Python [python]
2 kế thừa từ lớp

class Car: def go[self]: print['Going']

Code language: Python [python]
8 và

class Flyable: def fly[self]: print['Flying']

Code language: Python [python]
0, thì phương thức

class Car: def go[self]: print['Going']

Code language: Python [python]
87 của lớp đó cần gọi đúng phương thức

class Car: def go[self]: print['Going']

Code language: Python [python]
87 được chỉ định trong giải pháp đặt hàng phương thức

class ChildClass[ParentClass1, ParentClass2, ParentClass3]: pass

Code language: Python [python]
84 của lớp

class Flyable: def fly[self]: print['Flying']

Code language: Python [python]
2

Thứ ba, thêm phương thức

class Car: def go[self]: print['Going']

Code language: Python [python]
87 vào lớp

class Flyable: def fly[self]: print['Flying']

Code language: Python [python]
2

class Car: def go[self]: print['Going']

Code language: Python [python]
5

Độ phân giải thứ tự phương thức của lớp

class Flyable: def fly[self]: print['Flying']

Code language: Python [python]
2 là

class Car: def go[self]: print['Going']

Code language: Python [python]
0

class Car: def go[self]: print['Going']

Code language: Python [python]
24 gọi

class Car: def go[self]: print['Going']

Code language: Python [python]
87 của lớp

class Flyable: def fly[self]: print['Flying']

Code language: Python [python]
2. Do đó, bạn cần truyền đối số

class Car: def go[self]: print['Going']

Code language: Python [python]
27 cho phương thức

class Car: def go[self]: print['Going']

Code language: Python [python]
87

Bởi vì lớp

class Flyable: def fly[self]: print['Flying']

Code language: Python [python]
2 không thể truy cập phương thức

class Car: def go[self]: print['Going']

Code language: Python [python]
87 của lớp

class Car: def go[self]: print['Going']

Code language: Python [python]
8, bạn cần khởi tạo các thuộc tính

class Car: def go[self]: print['Going']

Code language: Python [python]
82 và

class Car: def go[self]: print['Going']

Code language: Python [python]
83 riêng lẻ

Thứ tự kế thừa có quan trọng trong Python không?

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 đa thừa kế 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.

Thứ tự có quan trọng không nếu một lớp kế thừa từ nhiều lớp trong Python?

Có, bạn có thể thực hiện nhiều kế thừa . vui lòng lưu ý thứ tự của lớp trong các vấn đề của ExampleSimMod.

Bạn có thể kế thừa từ nhiều lớp trong Python không?

Python hỗ trợ kế thừa từ nhiều lớp .

Kế thừa đa cấp hoạt động như thế nào trong Python?

Trong kế thừa đa cấp, các tính năng của lớp cơ sở và lớp dẫn xuất được kế thừa vào lớp dẫn xuất mới . Một ví dụ với trực quan hóa tương ứng được đưa ra dưới đây. Ở đây, lớp Derived1 được dẫn xuất từ ​​lớp Cơ sở và lớp Derived2 được dẫn xuất từ ​​lớp Derived1.

Chủ Đề