OOP Basics
Encapsulation
_protected, __private Convention
💡 Python encapsulation ek "honor system" jaisa hai — C++/Java ki tarah compiler-enforced private nahi hai, balki naming CONVENTION se signal diya jaata hai "ise bahar se mat chhuo", aur developers is convention ko respect karte hain.
Python mein TRUE private members nahi hote (Java ke private keyword jaisa). Convention hai: _name (single underscore) = "protected" (internal use, lekin technically accessible), __name (double underscore) = "private" jaisa (name mangling ho jaata hai, access mushkil ho jaata hai lekin impossible nahi).
@property decorator se Python mein getter/setter jaisa clean syntax milta hai — bina explicit getX()/setX() method calls ke, seedha attribute jaisa access karte hue validation add kar sakte ho.
class BankAccount:
def __init__(self, balance):
self.__balance = balance # "private" — name mangling hota hai
@property
def balance(self):
return self.__balance
@balance.setter
def balance(self, amount):
if amount < 0:
raise ValueError("Balance negative nahi ho sakta")
self.__balance = amount
acc = BankAccount(1000)
print(acc.balance) # 1000 — getter, method-call syntax nahi chahiye
acc.balance = 1500 # setter, validation ke saath
# acc.balance = -100 # ValueError raise hoga🔒
Python encapsulation ek "honor system" jaisa hai — C++/Java ki tarah compiler-enforced private nahi hai, balki naming CONVENTION se signal diya jaata hai "ise bahar se mat chhuo", aur developers is convention ko respect karte hain.
1 / 2
⚡ Quick Recap
- _name = protected convention, __name = private-ish (name mangling)
- @property/@x.setter = clean getter/setter syntax
- True enforcement nahi hai — convention aur trust par based hai
On this page (1 subtopics)
@staticmethod ek method hai jo na self na cls leta hai — class ke andar hai (logical grouping ke liye), lekin object ya class state se koi relation nahi. Utility functions ke liye common.
class MathUtils:
@staticmethod
def add(a, b):
return a + b
result = MathUtils.add(5, 3) # object banaye bina call ho sakta hai
print(result) # 8Tip: Agar function class se logically related hai lekin self/cls ki zaroorat nahi, @staticmethod use karo — @classmethod se simpler jab class state access nahi karna.