وراثت (Inheritance)
وراثت یا Inheritance یکی از ویژگی های مهم برنامه نویسی شی گرا در پایتون است. با استفاده از وراثت می توان کلاسی را تعریف کرد که تمام ویژگی ها و متدهای کلاس دیگر را به ارث ببرد. کلاسی که از آن ارث برده می شود کلاس والد (Parent Class) یا Base Class نام دارد و کلاسی که ارث بری می کند کلاس فرزند (Child Class) یا Derived Class نامیده می شود.
ایجاد کلاس والد
برای ایجاد کلاس والد همانند تعریف هر کلاس دیگری عمل می کنیم:
class Person:
def __init__(self, fname, lname):
self.firstname = fname
self.lastname = lname
def printname(self):
print(self.firstname, self.lastname)
x = Person("John", "Doe")
x.printname()
ایجاد کلاس فرزند
برای ایجاد کلاس فرزند کافی است نام کلاس والد را به عنوان پارامتر هنگام تعریف کلاس قرار دهید:
class Student(Person):
pass
x = Student("Mike", "Olsen")
x.printname()
نکته: زمانی که قصد افزودن ویژگی یا متد جدید ندارید می توانید از pass
استفاده کنید.
متد __init__ در کلاس فرزند
اگر متد __init__()
را در کلاس فرزند تعریف کنید، متد سازنده کلاس والد بازنویسی می شود. برای حفظ عملکرد والد می توانید آن را صریحاً فراخوانی کنید یا از super()
استفاده نمایید:
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
افزودن ویژگی ها
می توان ویژگی های جدیدی به کلاس فرزند اضافه کرد. برای مثال ویژگی graduationyear
:
class Student(Person):
def __init__(self, fname, lname, year):
super().__init__(fname, lname)
self.graduationyear = year
x = Student("Mike", "Olsen", 2019)
افزودن متدها
کلاس فرزند می تواند متدهای جدیدی داشته باشد یا متدهای والد را بازنویسی کند:
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)
اگر متدی در کلاس فرزند با همان نام متد والد تعریف شود، متد والد بازنویسی خواهد شد.
ادامه یادگیری
برای یادگیری بیشتر درباره کلاس ها و اشیاء در پایتون مطالعه کنید یا به بخش تکرارکننده ها (Iterators) بروید.