Special methods, also known as magic methods or dunder methods (short for “double underscore”), are methods with double underscores before and after their names (e.g., __init__
, __str__
, __repr__
). These methods allow customization of class behavior for built-in operations in Python. They enable developers to define how objects of a class should behave with respect to operations like initialization, representation, comparison, and arithmetic.
__init__
: Object Initialization__init__
method is the constructor in Python. It is called when an object is instantiated.Example:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
# Creating an object
person = Person("Alice", 30)
print(person.name) # Output: Alice
print(person.age) # Output: 30
__str__
: Informal String Representation__str__
method is called by the str()
function and the print()
function to return a string representation of the object that is informal and readable.Example:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __str__(self):
return f"{self.name}, {self.age} years old"
# Creating an object
person = Person("Alice", 30)
print(person) # Output: Alice, 30 years old
__repr__
: Official String Representation__repr__
method is called by the repr()
function and is used to generate an official string representation of the object. This should ideally be a string that could be used to recreate the object.Example:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __repr__(self):
return f"Person(name='{self.name}', age={self.age})"
# Creating an object
person = Person("Alice", 30)
print(repr(person)) # Output: Person(name='Alice', age=30)
__eq__
: Equality Comparison__eq__
method is used to define the behavior of the equality operator ==
for the class.Example:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __eq__(self, other):
return self.name == other.name and self.age == other.age
# Creating objects
person1 = Person("Alice", 30)
person2 = Person("Alice", 30)
print(person1 == person2) # Output: True
__lt__
: Less-Than Comparison__lt__
method is used to define the behavior of the less-than operator <
for the class.Example:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __lt__(self, other):
return self.age < other.age
# Creating objects
person1 = Person("Alice", 30)
person2 = Person("Bob", 25)
print(person1 < person2) # Output: False
__add__
: Addition__add__
method is used to define the behavior of the addition operator +
for the class.Example:
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 __repr__(self):
return f"Vector({self.x}, {self.y})"
# Creating objects
v1 = Vector(2, 3)
v2 = Vector(1, 4)
print(v1 + v2) # Output: Vector(3, 7)
__len__
: Length__len__
method is used to define the behavior of the built-in len()
function for the class.Example:
class CustomList:
def __init__(self, items):
self.items = items
def __len__(self):
return len(self.items)
# Creating an object
custom_list = CustomList([1, 2, 3, 4])
print(len(custom_list)) # Output: 4
__getitem__
: Indexing__getitem__
method is used to define the behavior of indexing operations, such as obj[key]
.Example:
class CustomList:
def __init__(self, items):
self.items = items
def __getitem__(self, index):
return self.items[index]
# Creating an object
custom_list = CustomList([1, 2, 3, 4])
print(custom_list[1]) # Output: 2
Special methods in Python allow customization of class behavior for built-in operations, enhancing the flexibility and usability of custom classes. By implementing special methods, developers can define how objects of a class should behave with respect to initialization, representation, comparison, arithmetic operations, and more. Understanding and effectively using these methods is key to leveraging the full power of Python’s object-oriented capabilities.