مرتضی
5 سال پیش توسط مرتضی مطرح شد
1 پاسخ

عملکرد super در ارث بری از چند کلاس در پایتون

سلام
به این کد نگاه کنید :

class First():
    def __init__(self):
        print ("first")

class Second(First):
    def __init__(self):
        super().__init__()
        print ("second")

class Third(First):
    def __init__(self):
        super()
        print ("third")

class Fourth(Second ,Third):
    def __init__(self):
        super().__init__()
        print ("that's it")

Fourth()

خروجیش به این صورته :

third
second
that's it

اینجور که من متوجه شدم پایتون میگه وقتی که از چند کلاس ارث بری میکنیم super() به اولین کلاس اشاره میکنه و درصورتی که اون متد رو نداشت به کلاس بعدی الی آخر
حالا اینجا کلاس second متد init رو داره و خب به اون اشاره میکنه اما وقتی که به

super().__init__()

کلاس second میرسه به جای اینکه بره سراغ کلاسی که second ازش ارث بری کرده یعنی First میره سراغ init کلاس دومی که کلاس Fourth ارث بری کرده یعنی third و اون رو اجرا میکنه

و حالا اگر به super() کلاس Third هم .__init__() رو اضافه کنیم یعنی :

class First():
    def __init__(self):
        print ("first")

class Second(First):
    def __init__(self):
        super().__init__()
        print ("second")

class Third(First):
    def __init__(self):
        super().__init__()
        print ("third")

class Fourth(Second ,Third):
    def __init__(self):
        super().__init__()
        print ("that's it")

Fourth()

خروجی میشه :

first  
third  
second  
that's it

میبینیم که بعد از اینکه init کلاس third رو اجرا کرده و اون هم init کلاس super رو صدا زده نگاه میکنه میبینه که ما کلاس سومی در Fourth ارث بری نکردیم و میاد به کلاس third نگاه میکنه که از چه کلاسی ارث بری کرده که اینجا first باشه و init اون رو اجرا میکنه

خلاصه سوالم اینه برداشت من درسته یا دارم چرت میگم 😂


ثبت پرسش جدید
حسام موسوی
تخصص : طراح و برنامه نویس
@hesammousavi 5 سال پیش مطرح شد
0

در پایتون به این شکل هست که اگر مایل هستید متد سازنده کلاس پدر اجرا بشه باید از

super().__init__(...)

استفاده بشه حتما


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام