ارث بری

از ویکی‌کد
پرش به ناوبری پرش به جستجو
Main Page Tutorial
Python-menu.png
موارد آموزشی
۱خانه
۲مقدمه
۳شروع کار
۴دستور زبان
۵اظهار نظرها
۶متغیرها
۷انواع داده‌ها
۸اعداد
۹تبدیل نوع
۱۰رشته‌ها
۱۱Booleans
۱۲عملگرها
۱۳لیست‌ها
۱۴تاپل‌ها
۱۵مجموعه‌ها
۱۶دیکشنری‌ها
۱۷If...Else
۱۸حلقهٔ While
۱۹حلقهٔ For
۲۰توابع
۲۱Lambda
۲۲آرایه‌ها
۲۳کلاس‌ها / اشیاء
۲۴ارث‌بری
۲۵Iteratorها
۲۶دامنه
۲۷ماژول‌ها
۲۸تاریخ و زمان
۲۹JSON
۳۰RegEx
۳۱PIP
۳۲Try...Except
۳۳ورودی کاربر
۳۴قالب‌بندی رشته
مدیریت فایل
یادگیری ماشین
MySQL در پایتون
MongoDB در پایتون
مرجع پایتون
مرجع ماژول
چگونه در پایتون؟
مثال‌های پایتون

ارث بری امکان تعریف کلاسی که همهٔ متدها و خصوصیت‌های کلاس دیگر را به ارث می‌برد فراهم می‌کند.[۱]

کلاس والد (به انگلیسی: Parent) کلاسی است که از آن به ارث برده می‌شود و همچنین کلاس پایه (به انگلیسی: Base) نیز نامیده می‌شود.

کلاس فرزند (به انگلیسی: Child) کلاسی است که از کلاس دیگر به ارث می‌برد، همچنین کلاس مشتق (به انگلیسی: Derived) هم نامیده می‌شود.

ایجاد یک کلاس والد

هر کلاسی می‌تواند کلاس والد باشد، بنابراین نحو آن مشابه نحو ایجاد کلاس‌های دیگر است:

کلاسی به نام Person با خصوصیت‌های firstname و lastname و یک متد printname ایجاد می‌کند:

کلاس Person:

 1 class Person:
 2   def __init__(self, fname, lname):
 3     self.firstname = fname
 4     self.lastname = lname
 5 
 6   def printname(self):
 7     print(self.firstname, self.lastname)
 8 
 9 #Use the Person class to create an object, and then execute the printname method:
10 
11 x = Person("John", "Doe")
12 x.printname()


مشاهدهٔ نتیجه


ایجاد یک کلاس فرزند

برای ایجاد کلاسی که عملکرد (به انگلیسی: Functionality) کلاس دیگر را به ارث می‌برد، هنگام ایجاد کلاس فرزند، کلاس والد را بعنوان پارامتر ارسال کنید:

کلاسی به نام Student ایجاد می‌کند که خصوصیت‌ها و متدها را از کلاس Person به ارث می‌برد:

1 class Student(Person):
2   pass
توجه: از کلمه کلیدی pass هنگامی استفاده می‌شود که نمی‌خواهید هیچ خصوصیت با متدهای دیگری به کلاس استفاده کنید.

حالا کلاس Student همان متدها و خصوصیت‌های کلاس person را دارد.

از کلاس Student برای ایجاد یک شیء و سپس اجرای متد printname استفاده می‌کند:

1 x = Student("Mike", "Olsen")
2 x.printname()


مشاهدهٔ نتیجه


اضافه کردن تابع __init__()

تا اینجا یک کلاس فرزند ایجاد کردیم که خصوصیت‌ها و متدهای والدش را به ارث می‌برد.

می‌خواهیم تابع __init__() را برای کلاس فرزند ایجاد کنیم (به جای کلمه کلیدی pass)

توجه: تابع __init__() هر بار که کلاس برای ایجاد یک شیء جدید استفاده شود بطور خودکار فراخوانی می‌شود.

تابع __init__() را به کلاس Student اضافه می‌کند:

1 class Student(Person):
2   def __init__(self, fname, lname):
3     #add properties etc.

هنگامی که تابع __init__() را اضافه کردید، کلاس فرزند دیگر از تابع __init__() والد ارث بری نمی‌کند.

نکته: تابع __init__() فرزند ارث بری تابع __init__() والد override می‌کند.

برای نگه‌داشتن ارث بری تابع __init__() والد، یک فراخوانی به تابع __init__() والد اضافه کنید:

1 class Student(Person):
2   def __init__(self, fname, lname):
3     Person.__init__(self, fname, lname)


مشاهدهٔ نتیجه


اکنون تابع __init__() را با موفقیت اضافه کرده‌ایم و ارث بری کلاس والد را نگه داشته‌ایم و آمادهٔ اضافه کردن تابع عملکرد (به انگلیسی: functionality) به تابع __init__() هستیم.

استفاده از تابع super()

همچنین پایتون تابع super() دارد که کلاس فرزند را اجبار به ارث بری خصوصیت‌ها و متدهای والدش می‌کند:

1 class Student(Person):
2   def __init__(self, fname, lname):
3     super().__init__(fname, lname)


مشاهدهٔ نتیجه


با استفاده از تابع super()، نیازی نیست از نام عنصر والد استفاده کنید، خودش بطور خودکار متدها و خصوصیت‌ها را از والدش به ارث می‌برد.

اضافه کردن خصوصیت ها

یک خصوصیت به نام graduationyear به کلاس Student اضافه می‌کند:

1 class Student(Person):
2   def __init__(self, fname, lname):
3     super().__init__(fname, lname)
4     self.graduationyear = 2019


مشاهدهٔ نتیجه


در مثال زیر، سال 2019 باید یک متغیر باشد، و هنگام ایجاد اشیاء Student به کلاس Student اضافه شود. برای این کار، پارامتر دیگری در تابع __init__() اضافه می‌کنیم:

یک پارامتر year اضافه می‌کند و سال صحیح را هنگام ایجاد اشیاء به آن ارسال می‌کند:

1 class Student(Person):
2   def __init__(self, fname, lname, year):
3     super().__init__(fname, lname)
4     self.graduationyear = year
5 
6 x = Student("Mike", "Olsen", 2019)


مشاهدهٔ نتیجه


اضافه کردن متدها

متدی به نام welcome به کلاس Student اضافه می‌کند:

1 class Student(Person):
2   def __init__(self, fname, lname, year):
3     super().__init__(fname, lname)
4     self.graduationyear = year
5 
6   def welcome(self):
7     print("Welcome", self.firstname, self.lastname, "to the class of", self.graduationyear)


مشاهدهٔ نتیجه


اگر در کلاس فرزند متدی با نام مشابه یک تابع در کلاس والد اضافه کنید، ارث بری از متد والد نادیده گرفته می‌شود (به انگلیسی: Override).


منابع آموزشی