آموزش ارث بری یا وراثت در پایتون
منبع: https://rasanika.com
ارثبری یا 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)
اگر متدی را در کلاس فرزند با همان نام که در والد وجود دارد تعریف کنید، ارث بری متد والد لغو می شود.