وراثت در کلاس های پایتون

  • مدرس: علی بیگدلی
  • تاریخ انتشار: 1402/05/03
  • تعداد بازدید: 161

وراثت یک راه برای به اشتراک گذاشتن قابلیت بین کلاس ها فراهم می کند.تصور کنید چند کلاس، Cat، Dog، Rabbitو غیره. اگر چه ممکن است برخی از آنها متفاوت باشد (تنها Dog ممکن است دارای متد bark (پارس کردن) باشد)، در سایر موارد احتمالا مشابه باشند (رنگ و نام ویژگی ها).این شباهت را می توان با ایجاد همه آنها از حیوانات سوپر کلاسیک که شامل قابلیت های مشترک است، بیان می شود.برای به ارث بردن یک کلاس از کلاس دیگر، پس از نام کلاس، نام ابر کلاس را در پرانتز قرار دهید.مثال:

class Animal: 
  def __init__(self, name, color):
    self.name = name
    self.color = color

class Cat(Animal):
  def purr(self):
    print("Purr...")
        
class Dog(Animal):
  def bark(self):
    print("Woof!")

fido = Dog("Fido", "brown")
print(fido.color)
fido.bark()

خروجی:

>>>
brown
Woof!
>>>

وراثت یک کلاس که از کلاس دیگری به ارث می برد، یک زیر کلاس نامیده می شود. یک کلاس که از آن به ارث برده می شود، سوپرکلاس نامیده می شود. اگر یک کلاس از یک دیگری با همان صفات یا روش به ارث برساند، آنها آنها را از بین می برد.

class Wolf: 
  def __init__(self, name, color):
    self.name = name
    self.color = color

  def bark(self):
    print("Grr...")

class Dog(Wolf):
  def bark(self):
    print("Woof")
        
husky = Dog("Max", "grey")
husky.bark()

خروجی:

>>>
Woof
>>>

میراث همچنین می تواند غیر مستقیم باشد. یک کلاس می تواند از دیگری به ارث برسد و آن کلاس می تواند از یک کلاس سوم به ارث برده شود. مثال:

class A:
  def method(self):
    print("A method")
    
class B(A):
  def another_method(self):
    print("B method")
    
class C(B):
  def third_method(self):
    print("C method")
    
c = C()
c.method()
c.another_method()
c.third_method()

خروجی:

>>>
A method
B method
C method
>>>

تابع فوق یک تابع مربوط به ارثی مفید است که به کلاس پدر و مادر اشاره دارد. این می تواند مورد استفاده قرار گیرد برای پیدا کردن روش با یک نام خاص در سوپر کلاس object. مثال:

class A:
  def spam(self):
    print(1)

class B(A):
  def spam(self):
    print(2)
    super().spam()
            
B().spam()

خروجی:

>>>
2
1    
>>>