Lesson 09 � OOP
OOP: CLASSES &
OBJECTS.
OOP se real-world entities ko code mein represent karte hain � Student, Car, BankAccount sab classes hain. Code reuse aur organization badhta hai. Classes ek blueprint hain, aur objects us blueprint se bante hain.
WHY: OOP kyun?
OOP (Object-Oriented Programming) ek programming paradigm hai jismein hum real-world entities ko code mein represent karte hain. Socho tum ek Student banana chahte ho � uska naam, course, marks. Har student ka data alag hai, but structure same hai. Yahi OOP ka kaam hai!
Core Concepts
Blueprint jo objects banata hai. Ismein data (attributes) aur methods define hote hain.
Class ka instance � bana hua item. Har object ka apna data hota hai.
Constructor jo object banate waqt data set karta hai. Pehla method jo call hota hai.
Object khud ko refer karta hai. Har method mein pehla parameter hota hai.
Pehli Class Banate Hain
Chalo ek Student class banate hain jo student ka data store kare:
class Student:
def __init__(self, name, age, course):
self.name = name
self.age = age
self.course = course
self.marks = []
def add_mark(self, mark):
self.marks.append(mark)
def average(self):
return sum(self.marks) / len(self.marks) if self.marks else 0
def summary(self):
return f"{self.name} ({self.course}) - Avg: {self.average():.1f}"
# Objects banao
aman = Student("Aman", 22, "Data Science")
aman.add_mark(85)
aman.add_mark(92)
print(aman.summary()) # Aman (Data Science) - Avg: 88.5
priya = Student("Priya", 21, "Python")
priya.add_mark(95)
priya.add_mark(88)
print(priya.summary()) # Priya (Python) - Avg: 91.5Dekho � class Student: se ek blueprint bana. __init__ mein self.name = name ka matlab hai ki jab object banega, uska naam set ho jayega. self khud ko refer karta hai.
Code Ko Samajhte Hain
| Part | Meaning |
|---|---|
class Student: | Ek naya blueprint bana raha hai � Student naam ka |
__init__(self, name, ...) | Constructor � jab Student(...) call hoga, ye chalega |
self.name = name | Object ka attribute set kar raha hai |
self.marks = [] | Har student ka apna empty marks list hoga |
def add_mark(self, mark) | Method � object ke marks mein mark add karta hai |
aman = Student("Aman", 22, "DS") | Ek actual object bana � ab Aman exist karta hai! |
self ko bhoolna! Har method mein pehla parameter self hona chahiye, but jab method call karo toh self mat do � Python automatically pass karta hai.Methods Add Karte Hain
Class mein methods (functions) se object apna kaam karta hai. Chalo Student class mein kuch aur methods add karte hain:
class Student:
def __init__(self, name, age, course):
self.name = name
self.age = age
self.course = course
self.marks = []
def add_mark(self, mark):
self.marks.append(mark)
def average(self):
if not self.marks:
return 0
return sum(self.marks) / len(self.marks)
def is_passing(self, passing_marks=40):
return self.average() >= passing_marks
def grade(self):
avg = self.average()
if avg >= 90: return "A+"
elif avg >= 80: return "A"
elif avg >= 70: return "B"
elif avg >= 60: return "C"
elif avg >= 50: return "D"
else: return "F"
def summary(self):
return f"{self.name} ({self.course}) - Avg: {self.average():.1f} | Grade: {self.grade()}"
# Use karo
rahul = Student("Rahul", 23, "ML")
rahul.add_mark(92)
rahul.add_mark(88)
rahul.add_mark(95)
print(rahul.summary())
# Rahul (ML) - Avg: 91.7 | Grade: A+
print(rahul.is_passing()) # True
sara = Student("Sara", 20, "Web Dev")
sara.add_mark(35)
sara.add_mark(42)
print(sara.summary())
# Sara (Web Dev) - Avg: 38.5 | Grade: F
print(sara.is_passing()) # FalseDekho � har student ka marks list alag hai. Rahul ke marks [92, 88, 95], Sara ke [35, 42]. Yahi OOP ki power hai � data encapsulation.
Class vs Object
| Feature | Class | Object |
|---|---|---|
| Kya hai? | Blueprint / Template | Instance / Bana hua item |
| Memory | Sirf ek baar define hota hai | Har object alag memory leta hai |
| Data | Attributes define karta hai | Attributes mein actual values hoti hain |
| Syntax | class Student: | s = Student("Aman", 22, "DS") |
| Analogy | Ghar ka naksha | Bana hua ghar |
Real-World Example: BankAccount
Chalo ek aur real-world example dekhte hain � BankAccount class:
class BankAccount:
def __init__(self, owner, balance=0):
self.owner = owner
self.balance = balance
self.transactions = []
def deposit(self, amount):
if amount <= 0:
return "Amount positive hona chahiye!"
self.balance += amount
self.transactions.append(("deposit", amount))
return f"?{amount} deposited. Balance: ?{self.balance}"
def withdraw(self, amount):
if amount > self.balance:
return "Insufficient balance!"
if amount <= 0:
return "Amount positive hona chahiye!"
self.balance -= amount
self.transactions.append(("withdraw", amount))
return f"?{amount} withdrawn. Balance: ?{self.balance}"
def get_balance(self):
return self.balance
def statement(self):
if not self.transactions:
return "No transactions yet."
result = f"--- {self.owner}'s Statement ---\n"
for t_type, amount in self.transactions:
result += f"{t_type}: ?{amount}\n"
result += f"Final Balance: ?{self.balance}"
return result
# Accounts banao
rahul_acc = BankAccount("Rahul", 1000)
print(rahul_acc.deposit(500)) # ?500 deposited. Balance: ?1500
print(rahul_acc.withdraw(200)) # ?200 withdrawn. Balance: ?1300
print(rahul_acc.statement())Try it: code ko run karo
Tips & Tricks
- Har class ka
__init__method hota hai � ye constructor hai selfka naam fix hai � kuch aur rakh sakte ho but conventionselfhai- Methods mein
selfas pehla parameter do, but call karte waqt mat do - Default values use karo �
def __init__(self, name, age=18): __str__method define karo �print(obj)achha dikhega- Ek class mein doosri class ko use kar sakte ho � composition!
__str__ method define karo � jab print(obj) karoge toh achha output milega bina kisi extra method ke!class Student:
def __init__(self, name, course):
self.name = name
self.course = course
def __str__(self):
return f"Student({self.name}, {self.course})"
s = Student("Aman", "DS")
print(s) # Student(Aman, DS) � direct print!Quick check
Python mein object banane ke liye pehle kya define karna padta hai?
Object ek blueprint se banta hai � uss blueprint ka naam Python mein class keyword se hota hai.
Common mistakes
# GALAT: self missing in method
class Student:
def __init__(name):
name = name # Kya set hoga✓ Kuch nahi!
# SAHI:
class Student:
def __init__(self, name):
self.name = name # Ab name store hoga
# GALAT: self ko manually pass karna
s = Student("Aman")
s.greet(s) # Error!
# SAHI:
s.greet() # Python automatically self pass karta haiAb Inheritance par chalo � ek class doosri class se kaise properties inherit karti hai.