Jak korzystać z enkapsulacji w Pythonie?

Enkapsulacja jest jednym z czterech fundamentów programowania obiektowego (OOP), obok dziedziczenia, polimorfizmu i abstrakcji. Pozwala ona na ukrywanie szczegółów implementacji klasy i ograniczenie dostępu do jej danych. W Pythonie enkapsulacja osiągana jest poprzez użycie metod dostępowych (getterów i setterów) oraz poprzez oznaczanie atrybutów jako prywatne, używając podkreślnika (_) na początku ich nazw. W tym artykule pokażemy, jak stosować enkapsulację w Pythonie na praktycznym przykładzie.

Kompletny przykład kodu z użyciem enkapsulacji

Rozważmy klasę Account, reprezentującą konto bankowe, które przechowuje informacje o saldzie. Chcemy zapewnić, że saldo będzie modyfikowane tylko przez zdefiniowane metody i nie będzie dostępne bezpośrednio z zewnątrz klasy.

class Account:
    def __init__(self, initial_balance):
        # Inicjalizacja salda jako prywatnego atrybutu
        self.__balance = initial_balance

    def deposit(self, amount):
        # Metoda pozwalająca na wpłacenie pieniędzy
        if amount > 0:
            self.__balance += amount
            print("Wpłacono:", amount)
        else:
            print("Kwota musi być większa od 0")

    def withdraw(self, amount):
        # Metoda pozwalająca na wypłacenie pieniędzy
        if amount > 0 and amount <= self.__balance:
            self.__balance -= amount
            print("Wypłacono:", amount)
        else:
            print("Niewystarczające środki lub kwota mniejsza od 0")

    def get_balance(self):
        # Metoda dostępowa (getter) do salda
        return self.__balance

# Tworzenie instancji klasy Account
account = Account(1000)

# Próba bezpośredniego dostępu do salda (zakończy się niepowodzeniem)
# print(account.__balance) # AttributeError

# Poprawne interakcje z kontem poprzez metody
account.deposit(500)
account.withdraw(200)
print("Aktualne saldo:", account.get_balance())

Jak korzystać z enkapsulacji w Pythonie?

Wstęp: Enkapsulacja jest jednym z czterech fundamentów programowania obiektowego (OOP), obok dziedziczenia, polimorfizmu i abstrakcji. Pozwala ona na ukrywanie szczegółów implementacji klasy i ograniczenie dostępu do jej danych. W Pythonie enkapsulacja osiągana jest poprzez użycie metod dostępowych (getterów i setterów) oraz poprzez oznaczanie atrybutów jako prywatne, używając podkreślnika (_) na początku ich nazw. W tym artykule pokażemy, jak stosować enkapsulację w Pythonie na praktycznym przykładzie.

Kompletny przykład kodu z użyciem enkapsulacji

Rozważmy klasę Account, reprezentującą konto bankowe, które przechowuje informacje o saldzie. Chcemy zapewnić, że saldo będzie modyfikowane tylko przez zdefiniowane metody i nie będzie dostępne bezpośrednio z zewnątrz klasy.

class Account:
    def __init__(self, initial_balance):
        # Inicjalizacja salda jako prywatnego atrybutu
        self.__balance = initial_balance

    def deposit(self, amount):
        # Metoda pozwalająca na wpłacenie pieniędzy
        if amount > 0:
            self.__balance += amount
            print("Wpłacono:", amount)
        else:
            print("Kwota musi być większa od 0")

    def withdraw(self, amount):
        # Metoda pozwalająca na wypłacenie pieniędzy
        if amount > 0 and amount <= self.__balance:
            self.__balance -= amount
            print("Wypłacono:", amount)
        else:
            print("Niewystarczające środki lub kwota mniejsza od 0")

    def get_balance(self):
        # Metoda dostępowa (getter) do salda
        return self.__balance

# Tworzenie instancji klasy Account
account = Account(1000)

# Próba bezpośredniego dostępu do salda (zakończy się niepowodzeniem)
# print(account.__balance) # AttributeError

# Poprawne interakcje z kontem poprzez metody
account.deposit(500)
account.withdraw(200)
print("Aktualne saldo:", account.get_balance())

 

Komentarze w kodzie wyjaśniają sposób działania enkapsulacji w klasie Account. Atrybut __balance jest oznaczony jako prywatny dzięki podwójnemu podkreśleniu, co uniemożliwia bezpośredni dostęp z zewnątrz klasy. Zamiast tego, dostęp do niego jest możliwy tylko za pośrednictwem metod deposit(), withdraw() oraz get_balance(), co zapewnia kontrolę nad zmianami wartości salda.

Podsumowanie

Enkapsulacja w Pythonie pozwala na ukrycie szczegółów implementacji klasy, ograniczając dostęp do jej wewnętrznych danych. Jest to kluczowe dla zapewnienia integralności obiektów i zapobiegania nieprzewidzianym zmianom stanu. Użycie enkapsulacji pozwala również na lepszą organizację kodu i ułatwia jego utrzymanie. Jak pokazano w przykładzie, stosowanie enkapsulacji w Pythonie jest proste, a przyjęte konwencje nazewnictwa i użycie metod dostępowych skutecznie zabezpieczają dostęp do prywatnych atrybutów klasy.

Jeżeli chcesz przyśpieszyć swoją naukę tworzenia stron chciałbym polecić mój kurs video Python w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.

Scroll to Top