Encapsulation
Concept
Bundle data (attributes) and methods (behaviours) into a single unit (class). It restricts direct access to some of the object’s components, which can prevent the accidental modification of data. Mainly hiding internal state and implementation details.
| Type of Encapsulation | Description |
|---|---|
| Public | Accessible from anywhere, no restrictions. |
| Protected | Accessible within the class and its subclasses, but not from outside. |
| Private | Accessible only within the class, not from outside or subclasses. |
Data Protection
- Prevent direct access to sensitive data.
- Validate data before modification.
- Maintains data integrity.
- Controls how data is accessed and modified.
Code Maintainability
- Internal implementation can change without affecting external code.
- External interface remains stable.
- Reduces dependencies on internal details (Reduces coupling between classes).
- Makes code easier to maintain and refactor.
Implementation
Encapsulation can be implemented through private, public, and protected attributes and methods.
Get and Set Methods
bank.py
class BankAccount:
def __init__(self, owner, balance, pin):
self.owner = owner # Public attribute
self._balance = balance # Protected attribute
self.__pin = pin # Private attribute
def get_pin(self):
return self.__pin
def set_pin(self, pin):
self.__pin = pin
def deposit(self, amount):
if amount > 0:
self._balance += amount
return True
return False
def withdraw(self, amount):
if 0 < amount <= self._balance:
self._balance -= amount
return True
return False
def get_balance(self):
return self._balanceProperty Decorators
You can use property decorators to create getter and setter methods for encapsulated attributes.
bank.py
class BankAccount:
def __init__(self, username, password, balance, pin):
self.username = username
self._balance = balance
self.__password = password
self.__pin = pin
@property
def balance(self):
return self._balance
@balance.setter
def balance(self, amount):
if amount >= 0:
self._balance = amount
else:
raise ValueError("Balance cannot be negative")Last updated on