🧩
OOP Basics

Classes & Objects

Blueprint & Instance
💡 Class ek cookie cutter hai, object har ek cookie jo usse banti hai — same shape (structure), lekin har cookie apna alag topping (data) rakh sakti hai.

Python mein class keyword se class define karte hain. Har method ka pehla parameter self hona ZAROORI hai — ye current object ka reference hai (Java ke "this" jaisa, lekin explicit likhna padta hai Python mein).

Object banane ke liye class ko function ki tarah call karo: ClassName(). Members access karne ke liye dot (.) operator use hota hai, jaise doosri languages mein.

class Car:
    def __init__(self, brand, speed):   # constructor
        self.brand = brand                # self.x = instance variable
        self.speed = speed

    def drive(self):                        # self zaroori hai har method mein
        print(f"{self.brand} chal raha hai {self.speed} km/h par")

car1 = Car("Toyota", 80)
car1.drive()   # "Toyota chal raha hai 80 km/h par"

car2 = Car("Honda", 100)
car2.drive()   # independent object, apna alag data
🧩
Class ek cookie cutter hai, object har ek cookie jo usse banti hai — same shape (structure), lekin har cookie apna alag topping (data) rakh sakti hai.
1 / 6
⚡ Quick Recap
  • class keyword se class banti hai, __init__ constructor hai
  • self = current object ka explicit reference, har method mein zaroori
  • ClassName() call karke object banta hai
On this page (2 subtopics)

Class variable (class ke andar, __init__ ke bahar declare) sab objects ke beech SHARE hoti hai — C++ ke static member jaisa. Instance variable (self.x, __init__ ke andar) har object ki apni alag copy hoti hai.

class Student:
    school = "Delhi Public School"   # class variable — SHARED

    def __init__(self, name):
        self.name = name               # instance variable — har object ka alag

s1 = Student("Aarav")
s2 = Student("Riya")

print(s1.school, s2.school)   # dono "Delhi Public School" — shared
Student.school = "New School"
print(s1.school, s2.school)   # dono update ho gaye — SAME variable
💡Tip: s1.school = "X" likhne se s1 ke liye ek NAYI instance variable ban jaati hai (jo class variable ko "shadow" karti hai) — Student.school khud change nahi hota. Sirf Student.school = "X" se class variable actually update hoti hai.

Python garbage collected hai — C++/Java jaisa manual destructor usually zaroori nahi. __del__ method available hai (object garbage-collect hone par chalta hai), lekin timing unpredictable hai, isliye critical cleanup ke liye context managers (with statement) prefer kiya jaata hai.

class Resource:
    def __init__(self):
        print("Resource created")
    def __del__(self):
        print("Resource cleaned up")   # kab chalega, guarantee nahi

r = Resource()
del r   # __del__ chalega, lekin exact timing garbage collector par depend karta hai
⚠️Common Mistake: __del__ par bharosa mat karo critical cleanup (jaise file close karna) ke liye — Python ka garbage collector timing guarantee nahi karta. with statement (context managers) use karo, jo aage File Handling category mein aayega.