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


