class A:
def hello(self): return "A"
class B(A):
def hello(self): return "B"
class C(A):
def hello(self): return "C"
class D(B, C): pass
print(D.__mro__) # D → B → C → A → object
print(D().hello()) # B
پایتون متد را در همین ترتیبِ __mro__ جستوجو میکند (الگوریتم C3: حفظ ترتیب والدها + احترام به ارثبری). super() هم در همین زنجیره قدم میزند، پس در وراثت چندگانه باید «مشارکتی» نوشته شود (هر __init__ زنجیره را با super().__init__() ادامه دهد و آرگومانها را با **kwargs رد کند).
کاربردِ سالم وراثت چندگانه فقط میکسین است: کلاسهای کوچکِ تکمنظوره (مثل JsonMixin) که حالتِ خودشان را نمیسازند و فقط یک قابلیت اضافه میکنند. درخت عمیقِ چندوالدی، بدهی فنی است.
اشتباه رایج
الماسِ وراثت (دو مسیر به یک والد) در پایتون والد را دوبار اجرا میکند.
تصحیح
MRO هر کلاس را فقط یکبار در زنجیره نگه میدارد؛ مشکلِ «دوبار اجرا» فقط وقتی میآید که super مشارکتی رعایت نشده باشد.