Trong ví dụ trên, lớp đối tượng là SuperClass. Các lớp sẽ kế thừa theo thứ tự nào?
Đến đây, MRO. MRO được sử dụng chủ yếu để có được thứ tự các phương thức sẽ được kế thừa khi có nhiều kế thừa. Python 3 sử dụng thuật toán tuyến tính hóa C3 cho MRO
Tuyến tính hóa lớp C
L[C] = C + hợp nhất tuyến tính hóa cha của C và danh sách cha của C theo thứ tự kế thừa từ trái sang phải.
Trong đó L[C] đại diện cho danh sách theo thứ tự C sẽ kích hoạt phương thức của các siêu lớp
Trong ví dụ trên
L[C] = C + hợp nhất[ L[A], L[B], AB]
L[A] = A + merge[L[O], O] # tuyến tính hóa của lớp cơ sở đối tượng [O] về cơ bản là danh sách đơn, i. chính nó
L[A] = AO
L[B] = BO # Quy trình tương tự như L[A]
vì vậy L[C] = C + hợp nhất [AO, BO, AB]
Bây giờ làm thế nào để tính toán hợp nhất?
Bước 1. - Đứng đầu danh sách đầu tiên
Đây,
- mro[A]=AN, đối tượng
- mro[B]=B, A, đối tượng
- mro[C]=C, A, đối tượng
- mro[D]=D, B, C, A, đối tượng
Ghi chú. Đối tượng là một siêu lớp mặc định trong python
Chương trình. MRO [bản demo9. py]class A: def m1[self]: print["m1 from A"] class B[A]: def m1[self]: print["m1 from B"] class C[A]: def m1[self]: print["m1 from C"] class D[B, C]: def m1[self]: print["m1 from D"] print[A.mro[]] print[B.mro[]] print[C.mro[]] print[D.mro[]]
đầu ra
class A: def m1[self]: print["m1 from A"] class B[A]: def m1[self]: print["m1 from B"] class C[A]: def m1[self]: print["m1 from C"] class D[B, C]: def m1[self]: print["m1 from D"] c=C[] c.m1[] print[C.mro[]]
đầu ra
Trong chương trình trên, với đối tượng c, chúng ta đang gọi phương thức m1. Vì vậy m1[] đã có sẵn trong lớp C nên đầu ra là m1 từ C
Chương trình. demo11. py ______3đầu ra
Trong chương trình trên, với đối tượng 'c', chúng ta đang gọi phương thức m1. Nhưng phương thức m1[] không có trong lớp C. Đầu tiên tìm kiếm sẽ ở lớp C, sau đó nó sẽ ở lớp A vì A là siêu lớp đối với C. Trong lớp A có sẵn phương thức m1[] nên đầu ra là ‘m1 from A’
Chương trình. MRO tiếp theo. [demo12,py]class A: def m1[self]: print["m1 from A"] class B[A]: def m1[self]: print["m1 from B"] class C[A]: def m1[self]: print["m1 from C"] class D[B, C]: def m1[self]: print["m1 from D"] d=D[] d.m1[] print[D.mro[]]
đầu ra
Trong chương trình trên, với đối tượng 'd', chúng ta đang gọi phương thức m1. Vì, phương thức m1[] đã có sẵn trong lớp D, nên đầu ra là 'm1 from D'
Chương trình. MRO contd [demo13. py]class A: def m1[self]: print["m1 from A"] class B[A]: def m1[self]: print["m1 from B"] class C[A]: def m1[self]: print["m1 from C"] class D[B, C]: def m3[self]: print["m3 from D"] d=D[] d.m1[] print[D.mro[]]
đầu ra
Trong chương trình trên, với đối tượng 'd', chúng ta đang gọi phương thức m1[]. Nhưng, phương thức m1[] không khả dụng trong lớp D. Vì vậy, tiếp theo nó sẽ tìm kiếm trong lớp B vì nó là siêu lớp so với lớp D và cũng là lớp đầu tiên được tìm kiếm theo MRO. Trong lớp B, phương thức m1[] có sẵn, vì vậy đầu ra là 'm1 từ B'
Chương trình. MRO contd [demo14. py]class A: def m1[self]: print["m1 from A"] class B[A]: def m2[self]: print["m1 from B"] class C[A]: def m1[self]: print["m1 from C"] class D[B, C]: def m3[self]: print["m3 from D"] d=D[] d.m1[] print[D.mro[]]
đầu ra
Trong chương trình trên, với đối tượng 'd', chúng ta đang gọi phương thức m1[]. Vì phương thức m1[] không có sẵn trong lớp D nên nó sẽ tìm kiếm trong lớp B dựa trên MRO [lớp B là lớp cha của lớp D]. phương thức m1[] cũng không khả dụng trong lớp B. Vì vậy, tiếp theo nó sẽ tìm kiếm trong lớp C vì C cũng là siêu hạng của lớp D. Trong lớp C có sẵn phương thức m1[] nên đầu ra là ‘m1 from C’
Demo2 cho MROĐây,
- mro[A]=AN, đối tượng
- mro[B]=B, đối tượng
- mro[C]=C, đối tượng
- mro[X]=X, A, B, đối tượng
- mro[Y]=Y, B, C, đối tượng
- mro[P]=P, X, A, Y, B, C, đối tượng
class A: def m1[self]: print["m1 from A"] class B: def m1[self]: print["m1 from B"] class C: def m1[self]: print["m1 from C"] class X[A, B]: def m1[self]: print["m1 from C"] class Y[B, C]: def m1[self]: print["m1 from A"] class P[X, Y, C]: def m1[self]: print["m1 from P"] print[A.mro[]]#AO print[X.mro[]]#XABO print[Y.mro[]]#YBCO print[P.mro[]]#PXAYBCO
đầu ra
Trong bài viết tiếp theo, tôi sẽ thảo luận về hàm Super[] trong Python. Ở đây, trong bài viết này, tôi cố gắng giải thích Thứ tự giải quyết phương pháp [MRO] bằng Python. Tôi hy vọng bạn thích bài viết Thứ tự giải quyết phương pháp [MRO] trong Python này. Tôi muốn có phản hồi của bạn. Vui lòng gửi phản hồi, câu hỏi hoặc nhận xét của bạn về bài viết này