ارثبری
ارث بری امکان تعریف کلاسی که همهٔ متدها و خصوصیتهای کلاس دیگر را به ارث میبرد فراهم میکند.[۱]
کلاس والد (به انگلیسی: Parent) کلاسی است که از آن به ارث برده میشود و همچنین کلاس پایه (به انگلیسی: Base) نیز نامیده میشود.
کلاس فرزند (به انگلیسی: Child) کلاسی است که از کلاس دیگر به ارث میبرد، همچنین کلاس مشتق (به انگلیسی: Derived) هم نامیده میشود.
ایجاد یک کلاس والد
هر کلاسی میتواند کلاس والد باشد، بنابراین نحو آن مشابه نحو ایجاد کلاسهای دیگر است:
کلاسی به نام Person
با خصوصیتهای firstname
و lastname
و یک متد printname
ایجاد میکند:
کلاس Person:
1 class Person:
2 def __init__(self, fname, lname):
3 self.firstname = fname
4 self.lastname = lname
5
6 def printname(self):
7 print(self.firstname, self.lastname)
8
9 #Use the Person class to create an object, and then execute the printname method:
10
11 x = Person("John", "Doe")
12 x.printname()
ایجاد یک کلاس فرزند
برای ایجاد کلاسی که عملکرد (به انگلیسی: Functionality) کلاس دیگر را به ارث میبرد، هنگام ایجاد کلاس فرزند، کلاس والد را بعنوان پارامتر ارسال کنید:
کلاسی به نام Student
ایجاد میکند که خصوصیتها و متدها را از کلاس Person
به ارث میبرد:
1 class Student(Person):
2 pass
pass
هنگامی استفاده میشود که نمیخواهید هیچ خصوصیت با متدهای دیگری به کلاس استفاده کنید.حالا کلاس Student همان متدها و خصوصیتهای کلاس person را دارد.
از کلاس Student
برای ایجاد یک شیء و سپس اجرای متد printname
استفاده میکند:
1 x = Student("Mike", "Olsen")
2 x.printname()
اضافه کردن تابع __init__()
تا اینجا یک کلاس فرزند ایجاد کردیم که خصوصیتها و متدهای والدش را به ارث میبرد.
میخواهیم تابع __init__()
را برای کلاس فرزند ایجاد کنیم (به جای کلمه کلیدی pass
)
__init__()
هر بار که کلاس برای ایجاد یک شیء جدید استفاده شود بطور خودکار فراخوانی میشود.تابع __init__()
را به کلاس Student
اضافه میکند:
1 class Student(Person):
2 def __init__(self, fname, lname):
3 #add properties etc.
هنگامی که تابع __init__()
را اضافه کردید، کلاس فرزند دیگر از تابع __init__()
والد ارث بری نمیکند.
__init__()
فرزند ارث بری تابع __init__()
والد override میکند.برای نگهداشتن ارث بری تابع __init__()
والد، یک فراخوانی به تابع __init__()
والد اضافه کنید:
1 class Student(Person):
2 def __init__(self, fname, lname):
3 Person.__init__(self, fname, lname)
اکنون تابع __init__() را با موفقیت اضافه کردهایم و ارث بری کلاس والد را نگه داشتهایم و آمادهٔ اضافه کردن تابع عملکرد (به انگلیسی: functionality) به تابع __init__()
هستیم.
استفاده از تابع super()
همچنین پایتون تابع super()
دارد که کلاس فرزند را اجبار به ارث بری خصوصیتها و متدهای والدش میکند:
1 class Student(Person):
2 def __init__(self, fname, lname):
3 super().__init__(fname, lname)
با استفاده از تابع super()
، نیازی نیست از نام عنصر والد استفاده کنید، خودش بطور خودکار متدها و خصوصیتها را از والدش به ارث میبرد.
اضافه کردن خصوصیت ها
یک خصوصیت به نام graduationyear
به کلاس Student
اضافه میکند:
1 class Student(Person):
2 def __init__(self, fname, lname):
3 super().__init__(fname, lname)
4 self.graduationyear = 2019
در مثال زیر، سال 2019
باید یک متغیر باشد، و هنگام ایجاد اشیاء Student
به کلاس Student اضافه شود. برای این کار، پارامتر دیگری در تابع __init__() اضافه میکنیم:
یک پارامتر year
اضافه میکند و سال صحیح را هنگام ایجاد اشیاء به آن ارسال میکند:
1 class Student(Person):
2 def __init__(self, fname, lname, year):
3 super().__init__(fname, lname)
4 self.graduationyear = year
5
6 x = Student("Mike", "Olsen", 2019)
اضافه کردن متدها
متدی به نام welcome
به کلاس Student
اضافه میکند:
1 class Student(Person):
2 def __init__(self, fname, lname, year):
3 super().__init__(fname, lname)
4 self.graduationyear = year
5
6 def welcome(self):
7 print("Welcome", self.firstname, self.lastname, "to the class of", self.graduationyear)
اگر در کلاس فرزند متدی با نام مشابه یک تابع در کلاس والد اضافه کنید، ارث بری از متد والد نادیده گرفته میشود (به انگلیسی: Override).
منابع آموزشی