The code below shows that when working with different object types like,
+ operator performs different functions. This is known as operator overloading and is another form of polymorphism.
# For an int and an int, + returns an int 2 + 4 == 6 # For a string and a string, + returns a string "Is this " + "addition?" == "Is this addition?" # For a list and a list, + returns a list [1, 2] + [3, 4] == [1, 2, 3, 4]
To implement this behavior, we must first discuss dunder methods. Every defined class in Python has access to a group of these special methods. We’ve explored a few already, the constructor
__init__() and the string representation method
__repr__(). The name dunder method is derived from the Double UNDERscores that surround the name of each method.
Recall that the
__repr__() method takes only one parameter,
self, and must return a string value. The returned value should be a string representation of the class, which can be seen by using
print() on an instance of the class. Review the sample code below for an example of how this method is used.
Defining a class’s dunder methods is a way to perform operator overloading.
class Animal: def __init__(self, name): self.name = name def __repr__(self): return self.name def __add__(self, another_animal): return Animal(self.name + another_animal.name) a1 = Animal("Horse") a2 = Animal("Penguin") a3 = a1 + a2 print(a1) # Prints "Horse" print(a2) # Prints "Penguin" print(a3) # Prints "HorsePenguin"
The above code has the class
Animal with a dunder method,
.__add__(). This defines the
+ operator behavior when used on objects of this class type. The method returns a new
Animal object with the names of the operand objects concatenated. In this example, we have created a
The line of code
a3 = a1 + a2 invokes the
.__add__() method of the left operand,
a1, with the right operand
a2 passed as an argument. The
name attributes of
a2 are concatenated using the
another_animal. The resulting string is used as the name of a new
Animal object which is returned to become the value of
There is now a
Meeting class with an
attendees list attribute and an
.__add__() dunder method that adds
Employee instances to the
attendees list. Before we try and add employees to a meeting, we want to make sure we can know how many employees are in a meeting.
- Overload the
len()operation by defining a
- Inside the
__len__()definition, return the length of the attribute
Now add three employees to a meeting:
- Using the
m1, add each of the employee instances
e3. Use one line for each employee instance.
- Output the length of meeting instance
You should see the output from each employee being added and then the length of the meeting,