MRO giải thích bằng cách sử dụng ví dụ trong Python là gì?

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,

  1. mro[A]=AN, đối tượng
  2. mro[B]=B, A, đối tượng
  3. mro[C]=C, A, đối tượng
  4. 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

Chương trình. MRO contd [demo10. 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"]

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,

  1. mro[A]=AN, đối tượng
  2. mro[B]=B, đối tượng
  3. mro[C]=C, đối tượng
  4. mro[X]=X, A, B, đối tượng
  5. mro[Y]=Y, B, C, đối tượng
  6. mro[P]=P, X, A, Y, B, C, đối tượng
Chương trình. MRO [bản demo15. py]
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

MRO[] trong Python là gì?

Thứ tự giải quyết phương thức [MRO] nó biểu thị cách ngôn ngữ lập trình giải quyết một phương thức hoặc thuộc tính . Python hỗ trợ các lớp kế thừa từ các lớp khác. Lớp được kế thừa được gọi là Lớp cha hoặc Lớp cha, trong khi lớp kế thừa được gọi là Lớp con hoặc Lớp con.

Ghi đè phương thức trong Python với ví dụ là gì?

Ghi đè phương thức trong Python là gì?

Tại sao chúng tôi sử dụng MRO?

Bảo trì, sửa chữa và vận hành, viết tắt là MRO, có mục đích duy trì cơ sở và thiết bị bên trong cơ sở để đảm bảo rằng mọi thứ đều hoạt động tốt và vận hành trơn tru.

MRO được tính như thế nào?

MRO được sử dụng chủ yếu để lấy 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. 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ự chúng được kế thừa từ trái sang phải .

Chủ Đề