50 کامل شده تا

ارث‌بری

از موتو کد، دانشنامهٔ برنامه‌نویسی
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 ایجاد می‌کند:

class Person:
  def __init__(self, fname, lname):
    self.firstname = fname
    self.lastname = lname

  def printname(self):
    print(self.firstname, self.lastname)

#Use the Person class to create an object, and then execute the printname method:

x = Person("John", "Doe")
x.printname()

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

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

مثال

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

class Student(Person):
  pass


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

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

مثال

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

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


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

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

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

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

مثال

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

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


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

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

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

مثال
class Student(Person):
  def __init__(self, fname, lname):
    Person.__init__(self, fname, lname)

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


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

مثال

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

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

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


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

مثال

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

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

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

مثال

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

class Student(Person):
  def __init__(self, fname, lname, year):
    super().__init__(fname, lname)
    self.graduationyear = year

x = Student("Mike", "Olsen", 2019)

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

مثال

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

class Student(Person):
  def __init__(self, fname, lname, year):
    super().__init__(fname, lname)
    self.graduationyear = year

  def welcome(self):
    print("Welcome", self.firstname, self.lastname, "to the class of", self.graduationyear)


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


منابع آموزشی