Ukrywanie danych jest kluczowym aspektem programowania obiektowego (OOP) i odnosi się do praktyki ograniczania dostępu do pewnych elementów klasy z zewnątrz tej klasy. W Pythonie mechanizm ten jest realizowany głównie przez konwencje, ponieważ wszystkie atrybuty w klasie są domyślnie publiczne. Jednak przy pomocy konwencji nazewnictwa oraz nieco bardziej zaawansowanych technik, takich jak dekoratory property, można efektywnie zarządzać dostępem do danych.
Przykład kodu z wyjaśnieniami
Zobaczmy, jak możemy zaimplementować ukrywanie danych w klasie BankAccount
, która ukrywa szczegóły salda konta bankowego, pozwalając na dostęp do niego tylko poprzez zdefiniowane metody.
class BankAccount:
def __init__(self, initial_balance):
# Prywatny atrybut: saldo konta
self.__balance = initial_balance
def deposit(self, amount):
# Metoda pozwalająca na wpłatę środków na konto
if amount > 0:
self.__balance += amount
print(f"Wpłacono: {amount}")
else:
print("Kwota wpłaty musi być większa od 0")
def withdraw(self, amount):
# Metoda pozwalająca na wypłatę środków z konta
if 0 < amount <= self.__balance:
self.__balance -= amount
print(f"Wypłacono: {amount}")
else:
print("Niewystarczające środki lub nieprawidłowa kwota")
def get_balance(self):
# Metoda zwracająca saldo konta
return self.__balance
# Tworzenie instancji klasy BankAccount
account = BankAccount(1000)
# Próba bezpośredniego dostępu do __balance
# spowoduje błąd
# print(account.__balance) # AttributeError
# Wpłata środków
account.deposit(500)
# Wypłata środków
account.withdraw(200)
# Wyświetlenie salda
print(f"Saldo konta: {account.get_balance
W powyższym kodzie, atrybut __balance
jest traktowany jako prywatny dzięki zastosowaniu podwójnego podkreślenia na początku nazwy. Dostęp do tego atrybutu z zewnątrz klasy jest ograniczony, co zmusza do korzystania z metod deposit()
, withdraw()
i get_balance()
do interakcji z saldem konta. Próba bezpośredniego dostępu do __balance
z zewnątrz klasy zakończy się błędem AttributeError
.
Podsumowanie
Ukrywanie danych w Pythonie to mechanizm kontroli dostępu do atrybutów klasy, który promuje bezpieczne i poprawne korzystanie z klas. Choć Python nie oferuje ścisłego mechanizmu ukrywania danych takiego jak niektóre inne języki programowania, konwencje i odpowiednie techniki pozwalają efektywnie zarządzać dostępem do wewnętrznych danych obiektu.
Jeżeli chcesz przyśpieszyć swoją naukę tworzenia stron chciałbym polecić mój kurs Python od podstaw w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.