06: Енкапсулација

Енкапсулацијата во Python е важен аспект од објектно-ориентираното програмирање кој овозможува контрола и управување со пристапот до атрибутите и методите на класите. Овој концепт е критичен за одржување на целосноста и безбедноста на кодот, како и за неговата лесна применливост и рефакторирање.

Како функционира енкапсулацијата во Python?

  1. Јавни методи и атрибути (public):
  • Јавни методи и атрибути во Python се оние кои се достапни од било каде во кодот.
  • Истите се дефинирани како обични методи и променливи во рамките на класата без никакви дополнителни маркери за пристап.Пример:
class Car:
    def __init__(self, make, model):
        self.make = make   # јавен атрибут
        self.model = model # јавен атрибут

    def drive(self):      # јавен метод
        return f"{self.make} {self.model} is driving"

2. Заштитени методи и атрибути (protected):

  • Заштитените методи и атрибути се означени со една подвлечена црта (_) пред нивното име (на пример, _variable или _method()).
  • Истите се сметаат за “заштитени” и се препорачуваат да се користат само во рамките на дефиницијата на класата и во поткласите од неа.

Пример:

class BankAccount:
    def __init__(self, balance):
        self._balance = balance  # Заштитен атрибут

    def _calculate_interest(self):  # Заштитен метод
        # Логика за пресметување на камата
        return self._balance * 0.05

3. Приватни методи и атрибути (private):

  • Приватните методи и атрибути се означуваат со две подвлечени црти (__) пред нивното име (на пример, __variable или __method()).
  • Истите се видливи само во дефиницијата на класата која ги дефинира и не можат да се пристапат или користат надвор од неа.
class CustomerData:
    def __init__(self, name, email):
        self.__name = name         # Приватен атрибут
        self.__email = email       # Приватен атрибут

    def __encrypt_data(self):     # Приватен метод
        # Логика за шифрирање на податоците
        encrypted_name = self.__name[::-1]
        encrypted_email = self.__email[::-1]
        return encrypted_name, encrypted_email