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