خانه / آموزش‌ها / آموزش وراثت در پایتون (Inheritance)

آموزش وراثت در پایتون (Inheritance)

🐍 HomeOfPython
|
📅 1404/10/19

سطح مقدماتی (Beginner Level)

وراثت (Inheritance) یکی از ارکان اصلی برنامه‌نویسی شی‌گرا (OOP) است. این قابلیت به ما اجازه می‌دهد کلاسی جدید بسازیم که خصوصیات (Attributes) و رفتارها (Methods) را از یک کلاس موجود به ارث می‌برد.

مفهوم کلاس والد و فرزند

کلاسی که از آن ارث‌بری می‌شود کلاس والد (Parent یا Base Class) و کلاس جدید کلاس فرزند (Child یا Derived Class) نامیده می‌شود. این کار باعث جلوگیری از تکرار کد می‌شود.

مثال ۱: ساختار پایه وراثت

در این مثال، کلاس Car ویژگی‌های کلاس Vehicle را به ارث می‌برد.

Python

مثال ۲: بازنویسی متدها (Method Overriding)

گاهی اوقات کلاس فرزند نیاز دارد رفتار متد کلاس والد را تغییر دهد. به این کار Overriding می‌گویند.

Python

تابع super()

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

دیاگرام ارتباط super

مثال ۱: استفاده از super در سازنده

Python

مثال ۲: گسترش عملکرد متد والد

می‌توانید کد والد را اجرا کنید و سپس چیزی به آن اضافه کنید.

python
# Static Snippet: منطق گسترش متد
class Parent:
    def greet(self):
        print("Hello from Parent")

class Child(Parent):
    def greet(self):
        super().greet()  # اجرای کد والد
        print("Hello from Child too!")

سطح پیشرفته (Professional Level)

در سطح حرفه‌ای، وراثت پیچیدگی‌های خاص خود را دارد، از جمله وراثت چندگانه، MRO و کلاس‌های انتزاعی.

وراثت چندگانه (Multiple Inheritance)

پایتون بر خلاف بسیاری از زبان‌ها، اجازه می‌دهد یک کلاس از چند کلاس والد به صورت همزمان ارث‌بری کند.

مثال ۱: وراثت چندگانه ساده

Python

ترتیب کاوش متدها (MRO - Method Resolution Order)

وقتی از وراثت چندگانه استفاده می‌کنید، اگر دو کلاس والد متدی با نام یکسان داشته باشند، پایتون کدام را اجرا می‌کند؟ این اولویت توسط MRO تعیین می‌شود (معمولاً از چپ به راست).

Python

چندریختی (Polymorphism)

پلی‌مورفیسم به توانایی استفاده از یک رابط (Interface) مشترک برای انواع مختلف داده‌ها اشاره دارد. در OOP، یعنی متدهای همنام در کلاس‌های مختلف کارهای متفاوتی انجام دهند، اما با یک روش یکسان فراخوانی شوند.

Python

کلاس‌های انتزاعی (Abstract Base Classes)

در معماری نرم‌افزار حرفه‌ای، گاهی می‌خواهیم قالبی بسازیم که کلاس‌های فرزند مجبور به پیاده‌سازی متدهای خاصی باشند. ماژول abc این امکان را فراهم می‌کند. کلاس‌های Abstract به خودی خود قابل نمونه‌سازی نیستند.

مثال فنی: اجبار به پیاده‌سازی

Python
python
# Static Snippet: الگوی طراحی Template Method با ABC
from abc import ABC, abstractmethod

class DataProcessor(ABC):
    def process(self):
        data = self.read_data()
        cleaned = self.clean_data(data)
        self.save_data(cleaned)
    
    @abstractmethod
    def read_data(self): pass
    
    @abstractmethod
    def save_data(self, data): pass

    # متد معمولی (اختیاری برای Override)
    def clean_data(self, data):
        return data.strip()