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