MRO یا Method Resolution Order در پایتون ترتیب جستجوی کلاسهای پایه رو برای فراخوانی متدها مشخص میکنه. این موضوع مخصوصاً توی وراثت چندگانه خیلی مهمه چون مشخص میکنه که وقتی یک متد فراخوانی میشه، پایتون از کدوم کلاس استفاده کنه.
🔎 چرا MRO مهمه؟
وقتی یک متد توی چند کلاس پایه (Parent Classes) وجود داشته باشه، پایتون از الگوریتم C3 Linearization استفاده میکنه تا ترتیب صحیح برای اجرای متدها رو پیدا کنه و از تداخلها جلوگیری کنه.
🔧 نحوه بررسی MRO
میتونی MRO یک کلاس رو با متد
mro()
یا ویژگی __mro__
ببینی:class MyClass:
pass
print(MyClass.mro())
# یا
print(MyClass.__mro__)
🔍 مثال ساده:
class A:
def method(self):
print("Method in A")
class B(A):
def method(self):
print("Method in B")
class C(B):
pass
c = C()
c.method() # خروجی: Method in B
print(C.mro())
📊 نتیجه MRO:
[<class '__main__.C'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>]
👨💻 وراثت چندگانه:
در وراثت چندگانه، پایتون MRO رو به این ترتیب محاسبه میکنه:
class A:
def method(self):
print("Method in A")
class B(A):
def method(self):
print("Method in B")
class C(A):
def method(self):
print("Method in C")
class D(B, C):
pass
d = D()
d.method() # خروجی: Method in B
🔗 ترتیب MRO:
[<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>]
---
MRO یه مفهوم کلیدی برای مدیریت وراثت چندگانه در پایتونه که میتونه از تداخلها جلوگیری کنه و کد رو تمیزتر کنه. برای یادگیری بیشتر، الگوریتم C3 Linearization رو بررسی کن!
@lython