Classes & Objects
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 keyword se class banti hai, __init__ constructor hai
- self = current object ka explicit reference, har method mein zaroori
- ClassName() call karke object banta hai
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 variablePython 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