🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۱ Afravi Mostafa
super() and inheritance
جامعه پایتون (وب) ایجاد شده در ۰۶ تیر ۱۴۰۲
class Parent:
  def __init__(self, txt):
    self.message = txt
  def printmessage(self):
    print(self.message)
class Child(Parent):
  
    super().__init__(txt)
x = Child("Hello, and welcome!")
x.printmessage()

1_وقتی در کلاس فرزند، درون پرانتز‌ها از کلاس دیگه ی نام برده بشه(پدر) ما به تمام پروپرتی و مثودها دست پیدا میکنه؟

2_ سوپر این وسط کارش چیه?

3_ چیزی که من متوجه شدم وقتی از سوپر استفاده می‌کنیم که بخوایم اوررایت بکنیم یک مثودی رو که در کیس بالا سوپر چایلد بی معنی هست چون چیزی رو ما عوض نکردیم و فقط نام پدر دروان پرانتز کافی هست؟

سلام،

  1. داخل پرانتز مشخص میکنیم که این کلاس فرزند از چه کلاسی ارث بری کند. تمامی متدها و متغیرهای public و protected کلاس پدر در کلاس فرزند قابل دسترسی است.
  2. دستور super() به کلاس والد اشاره میکند. مثلا دستور super().fun(self) میگه متد fun از کلاس والد رو صدا بزن. یا super().__init__(self) متد init از کلاس والد اشاره شده. حالا یوقت هست یک متد fun وجود دارد و فقط در کلاس والد قرار گرفته و در کلاس فرزند این متد مجدد بازنویسی نشده، پس اگر self.fun() رو بنویسیم اشاره به متد fun از کلاس والد دارد. (چون متدها و پراپرتی‌های public و protected والد همونطور که گفتم در کلاس فرزند دیده میشن و به ارث میرسند)
  3. موردی که در مورد super گفتید درسته معمولاً بهمین جهت استفاده میشود چون بازنویسی اتفاق افتاده و super را مینویسیم که صراحتاً اعلام کنم منظور کلاس والد است.
بهترین پاسخ
محسن موحد ۰۶ تیر ۱۴۰۲، ۲۲:۲۰