آموزش پایتون

مدیریت فایل

وراثت پایتون

وراثت در پایتون (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 دارای همان ویژگی ها و متدهای کلاس Person است.

مثال

از کلاس 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
				
			
در مثال زیر، سال 2019 باید یک متغیر باشد و هنگام ایجاد اشیاء student به کلاس Student منتقل شود. برای انجام این کار، پارامتر دیگری را در تابع __init__() اضافه کنید:

مثال

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

آموزش پایتون

مدیریت فایل