رفتن به محتوای اصلی
برنامه‌سازی پیشرفته با پایتون درس‌نامهٔ آزاد
مفهوم متوسط ۸ دقیقه

کلاس انتزاعی و پروتکل

abc.ABC و abstractmethod در برابر typing.Protocol: چه‌وقت کدام و تفاوت با اینترفیس جاوا.

جاوا «اینترفیس» جدا دارد؛ پایتون دو ابزار معادلِ تمیزتر دارد:

from abc import ABC, abstractmethod
from typing import Protocol

class Shape(ABC):  # اجبار وراثتی
    @abstractmethod
    def area(self): ...

class Drawable(Protocol):  # قرارداد ساختاری، بدون وراثت
    def draw(self) -> None: ...

def render(item: Drawable) -> None:
    item.draw()  # هر شیئی با متد draw قبول است

قاعدهٔ انتخاب: چارچوبی که دیگران از آن ارث می‌برند و رفتارِ مشترکِ واقعی هم داری → ABC. قراردادی که فقط «شکل» می‌خواهد و نمی‌خواهی سلسله‌مراتب تحمیل کنی → Protocol. هر دو از «اینترفیسِ جاواییِ ترجمه‌شده» پایتونیک‌ترند.

برداشت نادرست رایج

اشتباه رایج

هر جا جاوا اینترفیس داشت، در پایتون باید ABC گذاشت.

تصحیح

خیلی وقت‌ها Protocol (یا حتی همان duck typing مستندشده) دقیقاً همان نیاز است با کوپلینگ کمتر. ABC را برای وقتی نگه دار که واقعاً وراثت و رفتارِ مشترک می‌خواهی.

مطالب مرتبط

از همین بخش و با برچسب‌های مشترک

این مطلب را خواندید؟ آن را علامت بزنید تا پیشرفت شما روی همین دستگاه ذخیره شود.

وضعیت پیشرفت برای کلاس انتزاعی و پروتکل