وراثت در پایتون (Inheritance)
وراثت به ما اجازه می دهد کلاسی را تعریف کنیم که تمام متدها و ویژگی ها را از کلاس دیگری به ارث می برد.
کلاس والد (Parent class) کلاسی است که از آن به ارث برده شده است که به آن کلاس پایه (base class) نیز می گویند.
کلاس فرزند (Child class) کلاسی است که از کلاس دیگری به ارث می برد که به آن کلاس مشتق شده (derived class) نیز می گویند.
ساخت کلاس والد
هر کلاسی می تواند یک کلاس والد باشد، بنابراین نوع نوشتار مانند ایجاد هر کلاس دیگری است:
مثال
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)
#استفاده از کلاس پایتون برای ساخت شیء، و سپس اجرای متدی که برای پرینت ساخته شده
x = Person("John", "Doe")
x.printname()
ساخت یک کلاس فرزند
مثال
یک کلاس به نام Student ایجاد کنید که ویژگی ها و متدها را از کلاس Person به ارث می برد:
class Student(Person):
pass
توجه: زمانی که نمی خواهید هیچ ویژگی یا متد دیگری به کلاس اضافه کنید از کلمه کلیدی pass استفاده کنید.
مثال
از کلاس Student برای ایجاد یک شی استفاده کنید و سپس متد printname را اجرا کنید:
x = Student("Mike", "Olsen")
x.printname()
افزودن تابع __init__()
__init__()
را به کلاس فرزند اضافه کنیم (به جای کلمه کلیدی pass). __init__()
به طور خودکار هر بار که از کلاس برای ایجاد یک شی جدید استفاده می شود، فراخوانی می شود. مثال
__init__()
را به کلاس Student اضافه کنید:
class Student(Person):
def __init__(self, fname, lname):
#اضافه کردن ویژگی ها و غیره
__init__()
را اضافه می کنید، کلاس فرزند دیگر تابع __init__()
والدین را به ارث نمی برد. توجه: تابع __init__()
فرزند، وراثت تابع __init__()
والد را لغو می کند.
__init__()
والد، تابع __init__()
والد را فراخوانی کنید: مثال
class Student(Person):
def __init__(self, fname, lname):
Person.__init__(self, fname, lname)
__init__()
را با موفقیت اضافه کرده ایم و ارث بری کلاس والد را حفظ کرده ایم و آماده هستیم تا عملکرد را در تابع __init__()
اضافه کنیم. تابع __super__()
پایتون همچنین دارای یک تابع super()
است که باعث میشود کلاس فرزند، تمام متدها و ویژگیها را از والد خود به ارث ببرد:
مثال
class Student(Person):
def __init__(self, fname, lname):
super().__init__(fname, lname)
super()
، لازم نیست از نام عنصر والد استفاده کنید، این عنصر به طور خودکار متدها و خصوصیات را از والد خود به ارث می برد. افزودن ویژگیها
مثال
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)