Magic Methods

__init__ - Constructor
__init__ - ConstructorCalled when an object is created.
class Person:
def __init__(self, name):
self.name = name
p = Person("Alice")__str__ – String Representation
__str__ – String RepresentationCalled 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
__repr__ – Official String RepresentationUsed in debugging and repr(obj).
def __repr__(self):
return f"Person('{self.name}')"__len__ – Length
__len__ – LengthCalled 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
__getitem__, __setitem__ – Indexingclass 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
__add__, __sub__, __mul__, etc. – Operator Overloadingclass 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
__eq__, __lt__, etc. – Comparisonsclass 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
__call__ – Make an object callableclass Greeter:
def __call__(self, name):
return f"Hello, {name}!"
greet = Greeter()
print(greet("Alice")) # Hello, Alice!__enter__ / __exit__ – Context Managers (with statement)
__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
Magic Method
Triggered By
__init__
Object creation
__str__
print(obj)
__repr__
repr(obj)
__len__
len(obj)
__getitem__
obj[key]
__setitem__
obj[key] = value
__add__
obj1 + obj2
__eq__, etc.
Comparisons ==, <, etc.
__call__
obj()
__enter__/__exit__
with block
Last updated