پرسش

چطور تابع super در پایتون با ارث‌بری چندگانه کار می‌کنه؟

How does Python\'s super work with multiple inheritance?

در پایتون، وقتی از ارث‌بری چندگانه استفاده می‌کنیم، تابع super چطور کار می‌کنه و به چه صورت باید ازش استفاده کرد؟

1403/06/04
پاسخ
رضا دولتی عاشق برنامه نویسی و هوش مصنوعی!
بیوگرافی رضا دولتی

در پایتون، زمانی که از ارث‌بری چندگانه استفاده می‌کنیم، تابع super به ما کمک می‌کنه تا به متدهای والدین دسترسی پیدا کنیم. این تابع به صورت خودکار در زنجیره ارث‌بری جستجو می‌کنه و اولین متد مناسب رو پیدا می‌کنه و صدا می‌زنه. این به ما کمک می‌کنه که به طور مؤثرتر و بدون نیاز به مشخص کردن نام والدین، متدهای والدین رو فراخوانی کنیم.

مثال زیر نشون می‌ده چطور می‌تونیم از super در ارث‌بری چندگانه استفاده کنیم:

class A:
    def __init__(self):
        print("A's __init__")
    def method(self):
        print("A's method")
class B(A):
    def __init__(self):
        super().__init__()
        print("B's __init__")
    def method(self):
        super().method()
        print("B's method")
class C(A):
    def __init__(self):
        super().__init__()
        print("C's __init__")
    def method(self):
        super().method()
        print("C's method")
class D(B, C):
    def __init__(self):
        super().__init__()
        print("D's __init__")
    def method(self):
        super().method()
        print("D's method")
d = D()
d.method()

در این مثال، کلاس D از هر دو کلاس B و C ارث‌بری می‌کنه و با استفاده از super() به ترتیب مناسب متدهای والدین رو فراخوانی می‌کنه. زمانی که شیء d از کلاس D ساخته می‌شه، ترتیب صدا زدن متدها به صورت زیر خواهد بود:

  1. __ A's __init(از super() در کلاس B)
  2. __ C's __init (از super() در کلاس D)
  3. __ B's __init
  4. __ D's __init

و برای متدها:

  1. A's method (از super() در کلاس B)
  2. C's method (از super() در کلاس D)
  3. B's method
  4. D's method

با این ترتیب، super اطمینان حاصل می‌کنه که همه متدهای والدین به ترتیب درست صدا زده می‌شن و هیچ‌کدوم از دست نمی‌افتن.

این روش به ما کمک می‌کنه که کد تمیزتر و قابل مدیریتی داشته باشیم و از مشکلات احتمالی که می‌تونه با ارث‌بری چندگانه به وجود بیاد، جلوگیری کنیم.

پاسخ: 1403/06/04
آخرین آپدیت: 1403/08/03