10.1 Polymorphism vs. Function Passing

Operator Overloading

Suppose we define a Dog class:

class Dog:
   def __init__(self, name, size):
       self.name = name
       self.size = size
  
   def __gt__(self, other):
       return self.size > other.size

The Python code below can be used to find the maximum Dog in a list of Dogs.

def get_the_max(x):
   max_value = x[0]
   for item in x:
       if item > max_value:
           max_value = item
   return max_value

max_dog = get_the_max(doglist)

The get_the_max function in Python is general and can work on any type. It achieves this generality by harnessing "operator overloading".

More generally, this ability to handle any type is sometimes called "polymorphism", which I'll define via wikipedia as “the ability in programming to present the same programming interface for differing underlying forms” [wiki]

In this case, the > operator allows to compare anything (i.e. "any underlying form") in Python. In turn the definition of > is given by __gt__.

Last updated