کپسوله سازی در پایتون «Encapsulation» به معنای ترکیب دادهها «ویژگیها» و متدها «توابع» که بر روی دادهها عمل میکنند در یک واحد است، که معمولا یک کلاس است. این ویژگی همچنین دسترسی مستقیم به برخی اجزا را محدود میکند که به حفظ یکپارچگی دادهها کمک میکند و از استفاده صحیح از آنها اطمینان میدهد. کپسولهسازی یکی از مفاهیم کلیدی در برنامهنویسی شیگراست. پایتون نیز به عنوان یک زبان سطح بالا، بهطور کامل از شیگرایی پشتیبانی میکند و بسیاری از نرمافزارهای قدرتمند ساختهشده با پایتون از تکنیکهای شیگرایی بهره میبرند.در این مطلب از مجله پی استور ، به بررسی کپسوله سازی در پایتون «Python» خواهیم پرداخت و همچنین مفاهیم جدید مرتبط با آنرا در پایتون بررسی خواهیم کرد.
کپسوله سازی در پایتون چیست؟
کپسوله سازی در پایتون به مفهوم مخفیسازی جزئیات پیادهسازی یک کلاس و فراهم کردن رابطی ساده برای استفاده از آن است. این کار معمولا با استفاده از ویژگیها و متدهای خصوصی انجام میشود که دسترسی مستقیم به دادهها را محدود میکنند. برای این کار از پیشوندهای خاص مانند _ «برای ویژگیهای نیمهخصوصی» و __ «برای ویژگیهای خصوصی» استفاده میشود. هدف کپسولهسازی این است که از دستکاری مستقیم دادهها جلوگیری کرده و کنترل بهتری روی نحوه دسترسی به اطلاعات داخل کلاس فراهم شود.
مزایای کپسوله سازی در پایتون
کپسوله سازی در پایتون، فرایند پنهان کردن وضعیت داخلی یک شی و الزام تعاملات از طریق متدهای آن شی است. این رویکرد:
- کنترل بهتر بر دادهها فراهم میکند.
- از تغییرات تصادفی دادهها جلوگیری میکند.
- برنامهنویسی مدولار را ترویج میدهد.
پایتون از طریق ویژگیهای عمومی، محافظتشده و خصوصی به کپسوله سازی در پایتون دست مییابد.
کپسوله سازی در پایتون چگونه کار می کند؟
پنهانسازی دادهها: متغیرها «ویژگیها» خصوصی یا محافظتشده نگهداشته میشوند، به این معنی که به طور مستقیم از خارج کلاس قابل دسترسی نیستند. در عوض، فقط از طریق متدها میتوان به آنها دسترسی پیدا کرده یا تغییر داده شوند.
دسترسی از طریق متدها: متدها به عنوان رابطی عمل میکنند که از طریق آن کدهای خارجی با دادههای ذخیرهشده در متغیرها تعامل دارند. به عنوان مثال، متدهای «گتر» و «ستر» روشهای رایجی هستند که برای دریافت و بهروزرسانی مقادیر یک متغیر خصوصی استفاده میشوند.
کنترل و امنیت: با کپسوله سازی متغیرها و اجازه دادن به دستکاری آنها تنها از طریق متدها، کلاس میتواند قوانین خاصی برای نحوه دسترسی یا تغییر متغیرها اعمال کند، و بدین ترتیب کنترل و امنیت دادهها را حفظ میکند.
مثالی برای کپسوله سازی در پایتون
کپسوله سازی در پایتون مانند سیستم حساب بانکی است که در آن موجودی حساب «داده» خصوصی نگه داشته میشود. شما نمیتوانید مستقیما موجودی خود را با دسترسی به پایگاه داده حساب تغییر دهید. در عوض، بانک متدهایی مانند واریز و برداشت را برای تغییر موجودی به طور ایمن به شما ارائه میدهد.
- داده خصوصی (موجودی): موجودی شما به طور ایمن ذخیره میشود. دسترسی مستقیم از بیرون مجاز نیست، تا دادهها از تغییرات غیرمجاز محافظت شوند.
- متدهای عمومی (واریز و برداشت): اینها تنها راههایی هستند که میتوانند موجودی شما را تغییر دهند. آنها بررسی میکنند که آیا درخواستهای شما «مانند برداشت پول» طبق قوانین «مثلاً داشتن موجودی کافی» انجام میشود قبل از اینکه تغییرات را اجازه دهند.
چگونه کپسوله سازی را در کلاسهای پایتون پیادهسازی کنیم؟
کپسوله سازی در پایتون با استفاده از مشخصکنندههای دسترسی برای کنترل دسترسی به اعضای کلاس پیادهسازی میشود:
اعضا عمومی در پایتون
اعضا عمومی از هر جایی، هم داخل و هم خارج از کلاس، قابل دسترسی هستند. این اعضا به طور پیشفرض در پایتون تعریف میشوند.
class Public: def __init__(self): self.name = "John" # Public attribute def display_name(self): print(self.name) # Public method obj = Public() obj.display_name() # Accessible print(obj.name) # Accessible
- ویژگی عمومی (name): این ویژگی بدون هیچ پیشوندی از خط زیر مشخص شده است. از هر جایی، هم داخل و هم خارج از کلاس، قابل دسترسی است.
- متد عمومی (display_name): این متد نیز از هر بخش کد قابل دسترسی است. مستقیماً به ویژگی عمومی دسترسی پیدا کرده و مقدار آن را چاپ میکند.
- شیء (obj): یک نمونه از کلاس Public ساخته میشود و متد display_name فراخوانی میشود تا نشان دهد چگونه ویژگیها و متدهای عمومی به طور مستقیم قابل دسترسی هستند.
توجه: متد __init__ یک سازنده است و به محض ایجاد یک شی از کلاس، اجرا میشود.
اعضا محافظت شده در پایتون
اعضا محافظت شده با یک خط زیر _ مشخص میشوند. این اعضا به گونهای طراحی شدهاند که فقط در داخل کلاس یا زیرکلاسهای آن قابل دسترسی باشند.
class Protected: def __init__(self): self._age = 30 # Protected attribute class Subclass(Protected): def display_age(self): print(self._age) # Accessible in subclass obj = Subclass() obj.display_age()
- ویژگی محافظتشده (_age): این ویژگی با یک خط زیر آغاز میشود که به طور معمول نشان میدهد باید به عنوان یک عضو محافظتشده رفتار شود. این امر توسط پایتون اجباری نیست، اما نشان میدهد که نباید از خارج از کلاس و زیرکلاسهای آن به آن دسترسی پیدا کرد.
- زیرکلاس: در اینجا، یک زیرکلاس از کلاس Protected ارثبری میکند. در داخل این زیرکلاس، همچنان میتوان به ویژگی محافظتشده _age دسترسی داشت.
- متد (display_age): این متد در داخل زیرکلاس به ویژگی محافظتشده دسترسی پیدا کرده و مقدار آن را چاپ میکند. این نشان میدهد که اعضای محافظت شده میتوانند در داخل کلاس و زیرکلاسهای آن دسترسی پیدا کنند.
اعضا خصوصی در پایتون
اعضا خصوصی با دو خط زیر __ مشخص میشوند و نمیتوانند مستقیماً از خارج کلاس قابل دسترسی باشند. پایتون از «name mangling» برای غیرقابل دسترسی کردن اعضای خصوصی استفاده میکند، به این صورت که نام آنها را به صورت داخلی تغییر میدهد.
توجه: اعضای خصوصی و محافظتشده در پایتون از طریق «name mangling» میتوانند از خارج کلاس قابل دسترسی باشند.
class Private: def __init__(self): self.__salary = 50000 # Private attribute def salary(self): return self.__salary # Access through public method obj = PrivateExample() print(obj.salary()) # Works #print(obj.__salary) # Raises AttributeError
ویژگی خصوصی (__salary): این ویژگی با دو خط زیر آغاز میشود که آن را به یک عضو خصوصی تبدیل میکند. پایتون با استفاده از «name mangling» حریم خصوصی را اعمال میکند، به این معنی که نام ویژگی را به گونهای تغییر میدهد که دسترسی به آن از خارج کلاس دشوار شود.
متد (salary): این متد عمومی تنها راه دسترسی به ویژگی خصوصی از خارج کلاس است. این متد بهطور ایمن مقدار __salary را باز میگرداند.
تلاش برای دسترسی مستقیم: تلاش برای دسترسی مستقیم به ویژگی خصوصی (مثل obj.__salary) منجر به خطای AttributeError میشود و نشان میدهد که دسترسی مستقیم مسدود شده است. این روش پایتون برای اعمال کپسوله سازی در سطح زبان است.
نتیجه گیری
کپسوله سازی در پایتون یکی از اصول اصلی برنامهنویسی شیگراست که در پایتون نیز بهطور مؤثر استفاده میشود. این مفهوم به معنای مخفیسازی جزئیات داخلی یک کلاس و ارائه دسترسی محدود به آنها از طریق متدهای عمومی است. با استفاده از کپسوله سازی در پایتون، میتوان دادهها و ویژگیهای داخلی یک کلاس را از دسترسی مستقیم سایر بخشهای برنامه محافظت کرد و این کار موجب افزایش امنیت و ثبات برنامه میشود. کپسوله سازی در پایتون معمولاً با استفاده از ویژگیهای خصوصی و عمومی انجام میشود. ویژگیها و متدهای خصوصی تنها از داخل کلاس قابل دسترسی هستند و این امر به برنامهنویس این امکان را میدهد که کنترل بیشتری روی دادهها و رفتارهای کلاس داشته باشد.
یکی از مزایای کپسوله سازی این است که تغییرات داخلی یک کلاس میتواند بدون تأثیر بر بخشهای دیگر برنامه انجام شود، زیرا دسترسی به دادهها و ویژگیها از طریق متدهای عمومی محدود است. این ویژگی، بهویژه در پروژههای بزرگ و پیچیده، بسیار مفید است زیرا نگهداری و اصلاح کد آسانتر میشود. در نتیجه، کپسوله سازی به بهبود ساختار برنامهها، افزایش امنیت دادهها و سهولت در مدیریت تغییرات کمک میکند. همچنین با جلوگیری از دسترسی ناخواسته به ویژگیها و متدهای داخلی، به افزایش قابلیت اطمینان و جلوگیری از خطاهای احتمالی در برنامه کمک میکند.