继承 Python

继承 Python

ارث اجازه می‌دهد تا کلاسی که تمام روش‌ها و ویژگی‌های یک کلاس دیگر را تعریف می‌کند، ایجاد کنیم.

کلاس والدکلاسی است که ارث می‌برد، که به آن کلاس مادر نیز گفته می‌شود.

کلاس فرزندکلاسی است که از یک کلاس دیگر ارث می‌برد، که به آن کلاس مشتق نیز گفته می‌شود.

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

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

مثال

یک کلاس به نام 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)
# با استفاده از Person یک شیء ایجاد کنید و سپس روش printname را اجرا کنید:
x = Person("Bill", "Gates")
x.printname()

مثال اجرا

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

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

مثال

یک کلاس به نام Student ایجاد کنید که ویژگی‌ها و روش‌های Person کلاس را ارث می‌برد:

class Student(Person):
  گذر

توضیح:اگر نمی‌خواهید هیچ ویژگی یا روش دیگری به این کلاس اضافه کنید، از گذر کلمه کلیدی.

حالا، کلاس Student ویژگی‌ها و روش‌های مشابه Person کلاس را دارد.

مثال

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

x = Student("Elon", "Musk")
x.printname()

مثال اجرا

دستور کار __init__() را اضافه کنید

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

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

توضیح:هر بار که شما از کلاس برای ایجاد یک شیء جدید استفاده می‌کنید، دستور کار __init__() به صورت خودکار فراخوانی می‌شود.

مثال

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

class Student(Person):
  def __init__(self, fname, lname):
    # ویژگی‌ها و غیره اضافه کنید

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

توضیح:دستور کار __init__() فرزند، ارث __init__() عنصر والد را پوشش می‌دهد.

برای حفظ ارث __init__() عنصر والد، لطفاً فراخوانی __init__() عنصر والد را اضافه کنید:

مثال

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

مثال اجرا

حالا که ما موفق به اضافه کردن __init__() دستور کار شده‌ایم و ارث پدر را حفظ کرده‌ایم، آماده هستیم تا ویژگی‌ها را به __init__() دستور کار اضافه کنیم.

با استفاده از دستور کار super()

Python نیز یک 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("Elon", "Musk", 2019)

مثال اجرا

روش اضافه کردن

مثال

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

class Student(Person):
  def __init__(self, fname, lname, year):
    super().__init__(fname, lname)
    self.graduationyear = year
  def welcome(self):
    print("خوش‌آمدید", self.firstname, self.lastname, "به کلاس", self.graduationyear)

مثال اجرا

توجه:اگر شما یک روش با نام مشابه با روش پدر در زیرکلاس اضافه کنید، روش پدر را به‌روزرسانی خواهید کرد.