> For the complete documentation index, see [llms.txt](https://cs61b-2.gitbook.io/cs61b-textbook-2025/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://cs61b-2.gitbook.io/cs61b-textbook-2025/10.-inheritance-ii-extends-casting-higher-order-functions/10.1-subtype-polymorphism-vs.-function-passing.md).

# 10.1 Polymorphism vs. Function Passing

**Operator Overloading**

Suppose we define a Dog class:

```python
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.

```python
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](https://en.wikipedia.org/wiki/Polymorphism)]

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__`.
