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.