__init__
- Constructor
Called when an object is created.
class Person:
def __init__(self, name):
self.name = name
p = Person("Alice")
__str__
– String Representation
Called when you use print(obj)
.
class Person:
def __init__(self, name):
self.name = name
def __str__(self):
return f"My name is {self.name}"
print(Person("Alice")) # My name is Alice
__repr__
– Official String Representation
Used in debugging and repr(obj)
.
def __repr__(self):
return f"Person('{self.name}')"
__len__
– Length
Called by len(obj)
.
class MyList:
def __init__(self, data):
self.data = data
def __len__(self):
return len(self.data)
obj = MyList([1, 2, 3])
print(len(obj)) # 3
__getitem__
, __setitem__
– Indexing
class MyList:
def __init__(self, data):
self.data = data
def __getitem__(self, index):
return self.data[index]
def __setitem__(self, index, value):
self.data[index] = value
__add__
, __sub__
, __mul__
, etc. – Operator Overloading
class Vector:
def __init__(self, x, y):
self.x = x
self.y = y
def __add__(self, other):
return Vector(self.x + other.x, self.y + other.y)
def __str__(self):
return f"({self.x}, {self.y})"
v1 = Vector(1, 2)
v2 = Vector(3, 4)
print(v1 + v2) # (4, 6)
__eq__
, __lt__
, etc. – Comparisons
class Item:
def __init__(self, price):
self.price = price
def __eq__(self, other):
return self.price == other.price
i1 = Item(100)
i2 = Item(100)
print(i1 == i2) # True
__call__
– Make an object callable
class Greeter:
def __call__(self, name):
return f"Hello, {name}!"
greet = Greeter()
print(greet("Alice")) # Hello, Alice!
__enter__
/ __exit__
– Context Managers (with
statement)
class MyContext:
def __enter__(self):
print("Entering...")
return self
def __exit__(self, exc_type, exc_val, exc_tb):
print("Exiting...")
with MyContext():
print("Inside block")
Output:
Entering...
Inside block
Exiting...
📜 Summary Table