python, آموزش قدم به قدم پایتون, پایتون

ارث بری در پایتون

ارث بری در پایتون

ارث بری (Inheritance) یکی از مفاهیم اساسی و قدرتمند در برنامه‌نویسی شیءگرا است که در زبان‌های مختلف برنامه‌نویسی مورد استفاده قرار می‌گیرد. در پایتون نیز از این مفهوم استفاده می‌شود. ارث‌بری به برنامه‌نویسان این امکان را می‌دهد که یک کلاس جدید را بر اساس یک کلاس موجود (کلاس پایه یا پدر) تعریف کنند و از ویژگی‌ها و متدهای موجود در کلاس پدر بهره‌برداری کنند. در این مقاله، با مفهوم ارث بری در پایتون آشنا می‌شویم، کاربردهای آن را مورد بررسی قرار می‌دهیم و نحوه استفاده از آن را به تفصیل بررسی می‌کنیم. پیشنهاد می‌کنیم از دیگر آموزش‌های ما نیز دیدن فرمایید:

مفهوم ارث بری در پایتون

ارث‌بری به برنامه‌نویسان این امکان را می‌دهد که یک کلاس (کلاس فرزند) جدید را بر اساس یک کلاس موجود (کلاس والد یا کلاس پایه) تعریف کنند و از ویژگی‌ها و متدهای موجود در کلاس والد بهره‌برداری کنند. کلاس فرزند به کلاس والد ارث می‌برد و می‌تواند ویژگی‌های اضافی به آن اضافه کند یا ویژگی‌های موجود را تغییر دهد.

ارث‌بری در پایتون به وسیله استفاده از نام کلاس والد در تعریف کلاس فرزند انجام می‌شود. به عنوان مثال، فرض کنید یک کلاس والد به نام Animal داریم که ویژگی‌ها و متدهای مشترک برای تمام حیوانات را داراست. حالا می‌خواهیم یک کلاس فرزند به نام Dog تعریف کنیم که از کلاس Animal ارث‌بری کند:

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

    def speak(self):
        pass

class Dog(Animal):
    def speak(self):
        return f"{self.name} وفادار است و ووف می‌کند."

در این مثال، کلاس Dog از کلاس Animal ارث‌بری کرده است. این به این معناست که کلاس Dog تمام ویژگی‌ها و متدهای کلاس Animal را به ارث می‌برد و می‌تواند ویژگی‌ها و متدهای خود را نیز داشته باشد. در واقع، ما متد speak را در کلاس Dog بازنویسی کرده‌ایم تا ویژگی‌های خاص حیواناتی مانند سگ را پیاده‌سازی کند.

حالا می‌توانیم یک شیء از کلاس Dog ایجاد کنیم و از ویژگی‌ها و متدهای آن بهره‌برداری کنیم:

dog = Dog("rex")
print(dog.name)     # خروجی: "rex"
print(dog.speak())  # خروجی: "rex وفادار است و ووف می‌کند."

کاربردهای ارث بری در پایتون

ارث بری در پایتون در موارد مختلفی مورد استفاده قرار می‌گیرد و به برنامه‌نویسان امکانات متعددی را ارائه می‌دهد. در زیر به برخی از کاربردهای ارث‌بری در پایتون اشاره می‌کنیم:

  1. ساختارسازی بهتر کد: ارث‌بری به برنامه‌نویسان امکان می‌دهد که کدهای مشترک بین کلاس‌ها را در یک کلاس والد تعریف کنند و کدهای تکراری را کاهش دهند. این منجر به ساختارسازی بهتر کد می‌شود.
  2. پلی‌مورفیسم یا چندریختی: ارث‌بری به برنامه‌نویسان این امکان را می‌دهد که چندین کلاس فرزند از یک کلاس والد را تعریف کنند و به ویژگی‌ها و متدهای مشترک والد به شکل متفاوتی پاسخ دهند. این ویژگی به عنوان پلی‌مورفیسم شناخته می‌شود و به افزایش انعطاف‌پذیری کد کمک می‌کند.
  3. تعریف یک سلسله مراتب: با استفاده از ارث‌بری، می‌توانید یک سلسله مراتب از کلاس‌ها ایجاد کنید که هر کلاس فرزند وابسته به تعدادی کلاس دیگر باشد. این به شما این امکان را می‌دهد که تقسیم بندی منطقی کد خود را انجام دهید.
  4. کاهش تکرار کد: با تعریف ویژگی‌ها و متدهای مشترک در یک کلاس والد، می‌توانید از تکرار کدهای مشابه در کلاس‌های مختلف جلوگیری کنید و کد خود را ساده‌تر و مدیریت‌پذیرتر کنید.

نحوه استفاده از ارث‌بری

استفاده از ارث بری در پایتون بسیار ساده است. برای ارث‌بری از یک کلاس والد، کلاس فرزند را با نام کلاس والد تعریف کرده و نام کلاس والد را در داخل پرانتز تعیین کنید. سپس می‌توانید ویژگی‌ها و متدهای اضافی را به کلاس فرزند اضافه کنید یا متدهای موجود را بازنویسی کنید.

class ParentClass:
    # ویژگی‌ها و متدهای کلاس پدر

class ChildClass(ParentClass):
    # ویژگی‌ها و متدهای کلاس مشتق

مثال عملی

برای مثال، فرض کنید که می‌خواهیم یک کلاس Shape (شکل) تعریف کنیم که ویژگی‌ای مشترک برای همه اشکال همچون مساحت داشته باشد. سپس می‌خواهیم دو کلاس فرزند به نام‌های Rectangle (مستطیل) و Circle (دایره) تعریف کنیم که از کلاس Shape ارث‌بری کنند و ویژگی‌ها و متدهای خاص خود را داشته باشند.

class Shape:
    def __init__(self, color):
        self.color = color

    def area(self):
        pass

class Rectangle(Shape):
    def __init__(self, color, width, height):
        super().__init__(color)
        self.width = width
        self.height = height

    def area(self):
        return self.width * self.height

class Circle(Shape):
    def __init__(self, color, radius):
        super().__init__(color)
        self.radius = radius

    def area(self):
        import math
        return math.pi * self.radius ** 2

در مثال ارث بری در پایتون، کلاس Shape کلاس والد است که ویژگی مشترک color را دارد و متد area را تعریف کرده است (با پیش‌فرض خالی). سپس دو کلاس Rectangle و Circle از کلاس Shape ارث‌بری کرده‌اند. هر کدام از این کلاس‌ها ویژگی‌های خود را دارند (مانند width و height برای Rectangle و radius برای Circle) و متد area را بازنویسی کرده‌اند تا محاسبه مساحت شکل مخصوص به خود را انجام دهند.

حالا می‌توانیم شیء‌هایی از این کلاس‌ها ایجاد کنیم و از ویژگی‌ها و متدهای آنها بهره‌بریم:

rectangle = Rectangle("قرمز", 5, 10)
circle = Circle("آبی", 7)

print(rectangle.color)      # خروجی: "قرمز"
print(rectangle.area())      # خروجی: 50
print(circle.color)         # خروجی: "آبی"
print(circle.area())         # خروجی: 153.93804002589985

استفاده از ()super

در مثال بالا، ما از تابع super() برای فراخوانی متد معادل در کلاس والد استفاده کردیم. این تابع به ما امکان می‌دهد تا به متدهای کلاس والد دسترسی پیدا کنیم و آنها را از کلاس فرزند فراخوانی کنیم. در مثال Rectangle و Circle، ما از super().__init__(color) برای فراخوانی متد __init__ کلاس والد برای مقداردهی ویژگی color استفاده کردیم.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *