Python Inheritance
وراثت
وراثت این امکان را برای ما فراهم میکند تا بتوانیم کلاسی را تعریف کنیم که همه خصوصیات و توابع شیء کلاس دیگری را به ارث ببرد.
کلاس والد (parent class): کلاسی است که از آن به ارث برده میشود و گاهی به آن کلاس پایه (base class) نیز گفته میشود.
کلاس فرزند (child class): کلاسی است که از کلاسی دیگر ارث میبرد. به آن کلاس مشتق شده (derived class) نیز گفته میشود.
ساختن کلاس والد
هر کلاسی میتواند یک کلاس والد باشد. بنابراین نحوه نوشتن آن مانند هر کلاس دیگری است.
ساختن کلاس فرزند
برای ساختن کلاسی که کارکردهای یک کلاس دیگر را به ارث میبرد، هنگام ساختن آن باید اسم کلاس پدر را به صورت یک پارامتر به آن بفرستیم.
برای مثال اگر بخواهیم کلاس Student
را که از کلاس Person
به ارث میبرد بسازیم، به شکل زیر عمل میکنیم:
class Student(Person):
pass
pass
استفاده میکنیم.
الان کلاس Student
همان خواص و خصوصیات کلاس Person
را دارد.
اضافه کردن تابع ()__init__
تا الان کلاس فرزندی ساختیم که خصوصیات و توابع شیء کلاس دیگری را به ارث میبرد. حال میخواهیم تابع __init__()
را به آن اضافه کنیم.
__init__()
به صورت اتوماتیک فراخوانده میشود.
class Student(Person):
def __init__(self, fname, lname):
#add properties etc.
با اضافه کردن تابع __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__(self, fname, lname)
با استفاده از تابع super()
دیگر نیازی به استفاده از اسم کلاس والد نیست و کلاس فرزند به صورت خودکار همه خصوصیات و توابع شیء کلاس والد را به ارث میبرد.
اضافه کردن خصوصیات
در کد زیر خصوصیت graduationyear
را به کلاس Student
اضافه کرده ایم.
اضافه کردن تابع شیء
در کد زیر تابع شیء welcome
را به کلاس Student
اضافه کرده ایم.