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

کپسوله‌سازی

کپسوله‌سازی بدون عضو خصوصی اجباری: قرارداد آندرلاین، name mangling و property.

تعریف کپسوله‌سازی

پنهان‌کردن جزئیات داخلی پشت یک قرارداد عمومیِ پایدار تا بیرون به پیاده‌سازی وابسته نشود.

پایتون عضو خصوصیِ اجباری مثل جاوا ندارد و این تصمیمِ آگاهانهٔ زبان است، نه کمبود:

  • _name: قرارداد «داخلی» — بخوان ولی دست نزن.
  • __name: فعال‌سازی name mangling (تغییرنام به _Class__name) برای جلوگیری از تداخل در وراثت، نه امنیت.
  • property: خواندنِ کنترل‌شده بدون شکستن قرارداد.
class Temperature:
    def __init__(self, celsius):
        self._celsius = celsius

    @property
    def celsius(self):
        return self._celsius

    @celsius.setter
    def celsius(self, value):
        if value < -273.15:
            raise ValueError("زیر صفر مطلق ناممکن است.")
        self._celsius = value

بیرون همیشه t.celsius می‌بیند؛ امروز ویژگی ساده، فردا اعتبارسنجی — و هیچ کدی بیرون عوض نمی‌شود. این تمامِ جادوست.

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

اشتباه رایج

چون به _balance می‌شود دسترسی داشت، پس کپسوله‌سازی در پایتون بی‌معناست.

تصحیح

کپسوله‌سازی قرارداد اجتماعی و طراحی است نه قفل حافظه. در همهٔ زبان‌ها برنامه‌نویسِ مصمم می‌تواند به جزئیات برسد؛ هنر این است که کدِ سالم نیازی به این کار نداشته باشد.

پیش‌نیازها

مطالب مرتبط

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

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

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