encapsulation

This commit is contained in:
2025-08-25 00:32:37 +05:30
parent 19437430cc
commit f8c6a08749

View File

@ -0,0 +1,60 @@
class Car:
def __init__(self, brand, price):
self.brand = brand # Public attribute
self._engine = "V8" # Protected
self.__price = price # Private
# Public method
def start(self):
print(f"{self.brand} started with {self._engine} engine.")
# Getter for private attribute
def get_price(self):
return self.__price
# Setter for private attribute
def set_price(self, new_price):
if new_price > 0:
self.__price = new_price
else:
print("Invalid price!")
car = Car("BMW", 50000)
print(car.brand) # Public
print(car._engine) # Possible, but not recommended
# print(car.__price) # AttributeError
print(car.get_price()) # calling getter
car.set_price(60000)
print(car.get_price())
# ------------------------------------------------------------
# Encapsulation with @ property (Pythonic Way)
class BankAccount:
def __init__(self, balance):
self.__balance = balance # Private
@property
def balance(self):
return self.__balance
@balance.setter
def balance(self, new_amount):
if new_amount > 0:
self.__balance = new_amount
else:
print("Balance cannot be negative.")
raise ValueError("Balance cant be negative")
acc = BankAccount(1000)
print(acc.balance)
acc.balance = 2000 # Calls setter
print(acc.balance)
# acc.balance = -500