آموزش ارث بری یا وراثت در پایتون

ارث بری یا وراثت در پایتون

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

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

  • کلاس فرزند، کلاسی است که از کلاس والد به ارث می برد.

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

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

مثال

یک کلاس با نام 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()

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

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

مثال

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

class Student(Person):
  pass

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

اکنون کلاس Student دارای همان ویژگی ها و متدهای کلاس Person است.

مثال

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

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

تا اینجا ما یک کلاس فرزند ایجاد کرده ایم که ویژگی ها و متدها را از والد خود به ارث می برد.

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

مثال

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

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

برای حفظ تابع __init__() والد، باید خودمان آن را در فرزند فراخوانی کنیم:

مثال

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

با اینکار هم تابع __init__() خودمان را اضافه کردیم و هم ارث بری آن را از والد حفظ کردیم.

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

با استفاده از تابع super()، لازم نیست از خود نام کلاس والد استفاده کنید:

مثال

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

تابع super() به کلاس والد فعلی اشاره می‌کند و به همه متدها و ویژگی های آن دسترسی دارد.

افزودن ویژگی

یک property به نام graduationyear به کلاس Student اضافه کنید:

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

یک پارامتر به نام 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)

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

منتشر شده در رسانیکا، پلتفرم اشتراک‌گذاری محتوا