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

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

ارث‌بری یا 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)

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

آموزشنوشتهپایتونبرنامه نویسی
1083 👍0
منتشر شده در رسانیکا، پلتفرم اشتراک‌گذاری محتوا