Skip to main content

From Diamonds to Mixins: Demystifying Multiple Inheritance in Python

Python Internals & Ecosystem
South Hall 2A
14:35 on 12 July 2024
30 minutes


Most Python programmers are probably aware that Python supports multiple inheritance. However, few are likely to be aware of its implications and inner workings. This talk aims to shed light on this commonly overlooked topic.

In the first part of the talk we will start by reviewing the “diamond problem,” where a class inherits from two classes that have a common ancestor, and contrast how this issue is handled in Python compared to other object oriented languages. Next, we will discuss the Method Resolution Order (MRO) to see how Python determines the sequence in which classes are considered when searching for a method or attribute. We will also review the use of the super() function that allows a subclass to call a method from its superclass in a way that adheres to the MRO.

During the second part of the talk, we will explore real-world scenarios related to the benefits, problems, and alternatives of using multiple inheritance in our programs. We will dedicate some time to examining the concept of a mixin and how to implement it effectively in Python. Finally, we will delve into the Interface Segregation Principle and explore collaboration and composition as mechanisms for avoiding the pitfalls of inheritance in general.

The speaker

Ariel Ortiz

Ariel Ortiz

Ariel Ortiz is a programming languages geek. Since 1994, he’s been a full time faculty member at the Tecnológico de Monterrey in Mexico, where he has been involved mainly in teaching undergraduate computer science courses. His first encounter with Python was back in 2001, and since then he has used it in several of his classes, including: CS1, Data Structures, Web Development, Design Patterns, Programming Languages, and Compiler Design. He’s an active member of ACM’s special interest group on computer science education (SIGCSE) and the main author of the Spanish language websites EduPython and RIP3.