جدید کپسوله سازی یا Encapsulation در پایتون
کپسولهسازی فرآیندی است برای جلوگیری از دسترسی مشتریان به بعضی ویژگیهای ، که فقط از طریق روشهای خاص قابل دسترسی است.
ویژگیهای خصوصی ویژگیهای غیرقابل دسترسی هستند و ما از دو underscore (__) برای اعلام ویژگی های خصوصی استفاده می کنیم.
مثال قبلی را در نظر بگیرید. فرض کنید می خواهیم در کلاس Person متدی داشته باشیم که تعداد ساعت اضافه کار کارمند در یک ماه را بگیرد و اضافه حقوق این ماه او را به ما بدهد. ابتدا لازم است یک ویژگی خصوص در __init__ اضافه کنیم که دستمزد اضافه کاری به ازای هر یک ساعت را در آن ذخیره کنیم:
def __init__(self, first_name, last_name, IDnumber ): self.firstname=first_name self.lastname=last_name self.ID=IDnumber self.salary = None self.__extraperhour=500000
همچنین باید یک متد به کلاس اضافه کنیم که تعداد ساعت اضافه کار را بگیرد و اضافه حقوق را محاسبه نماید و برگرداند:
def get_extra(self, extra_hours): return extra_hours * (self.__extraperhour)
کلاس را به طور کامل می توانید در زیر مشاهده کنید:
class Person: def __init__(self, first_name, last_name, IDnumber ): self.firstname=first_name self.lastname=last_name self.ID=IDnumber self.salary = None self.__extraperhour=500000 def set_salary(self, salary): self.salary = salary def get_extra(self, extra_hours): return extra_hours * (self.__extraperhour)
حالا یک عضو تعیین می کنیم و سپس مقدار اضافه حقوق او را دریافت می نماییم:
kamran=Person('Kamran' , 'Hamidi' , '1257148') print(kamran.get_extra(9))
با توجه به اینکه دستمزد یک ساعت اضافه حقوق را از طریق self.__extraperhour معادل 500000 ریال تعریف کرده بودیم، این کارمند به ازای 9 ساعت اضافه کار مبلغ 4500000 ریال اضافه حقوق دریافت خواهد کرد.
حالا اگر تلاش کنید که با دستور زیر دستمزد یک ساعت اضافه کار را استخراج کنید:
print(kamran.__extraperhour)
با این خطا مواجه خواهید شد:
AttributeError: ‘Person’ object has no attribute ‘__extraperhour’
اما شاید بعدا بخواهیم با توجه به شرایط حقوق یک ساعت اضافه کار این کارمند را تغییر دهیم. بنابراین می توانیم برای تعیین مقدار __extraperhour نیز تابعی در بدنه کلاس بنویسیم:
def set_perhour(self, perhour): self.__extraperhour=perhour
حالا با اجرای دستور زیر دستمزد یک ساعت اضافه کار شخص به 550000 ریال تغییر می کند:
kamran.set_perhour(550000)
و با اجرای دستور زیر اضافه کار یک ماه او معادل 4950000 ریال محاسبه خواهد شد:
print(kamran.get_extra(9))
در مطلب بعدی به مبحث وراثت یا ارث بری خواهیم پرداخت.