
Episode 261: Selecting Inheritance or Composition in Python
The Real Python Podcast
When considering an object-oriented programming problem, should you prefer inheritance or composition? Why wouldn’t it just be simpler to use functions? Christopher Trudeau is back on the show this week, bringing another batch of PyCoder’s Weekly articles and projects.
Christopher shares an article about structuring code using inheritance, composition, or only functions. We discuss how the piece is a good exploration of the trade-offs of each solution. Unlike the tutorials beginners typically encounter while learning the fundamentals, the article goes much deeper into the “why” of object-oriented programming.
We also share several other articles and projects from the Python community, including a news roundup, processing audio in Python, reasons why you shouldn’t call dunder methods, smuggling arbitrary data through an emoji, an HTML to markdown converter, and a library to convert Python requests into curl commands.
Course Spotlight: Single and Double Underscore Naming Conventions in Python
In this video course, you’ll learn a few Python naming conventions involving single and double underscores (_). You’ll learn how to use this character to differentiate between public and non-public names in APIs, write safe classes for subclassing purposes, avoid name clashes, and more.
Topics:
- 00:00:00 – Introduction
- 00:02:23 – Python 3.13.6 Released
- 00:02:47 – Django 5.2.5 Released
- 00:02:55 – Django REST Framework Release v3.16.1
- 00:03:09 – Narwhals v2.0.0 Released
- 00:03:22 – mypy 1.17 Released
- 00:03:42 – PEP 798: Unpacking in Comprehensions
- 00:04:11 – PEP 799: A Dedicated Profilers Package for Organizing Python Profiling Tools
- 00:06:12 – PyPI Users Email Phishing Attack
- 00:07:33 – Django in Action
- 00:08:00 – Call for proposals deadline - PyCon NL
- 00:08:59 – Python Audio Processing With pedalboard
- 00:18:49 – Smuggling Arbitrary Data Through an Emoji
- 00:21:53 – Don’t Call Dunder Methods
- 00:28:51 – Video Course Spotlight
- 00:30:27 – Inheritance Over Composition, Sometimes
- 00:40:03 – html-to-markdown: HTML to Markdown Converter
- 00:42:20 – curlify: A library to convert Python requests request object into curl commands
- 00:44:18 – transfunctions: Support Both Sync and Async
- 00:45:18 – Thanks and goodbye
Survey:
News:
- Python 3.13.6 Released
- Django 5.2.5 Released
- Django REST Framework Release v3.16.1
- Narwhals v2.0.0 Released
- Mypy 1.17 Released
- PEP 798: Unpacking in Comprehensions (Added)
- PEP 799: A Dedicated Profilers Package for Organizing Python Profiling Tools (Added)
- PyPI Users Email Phishing Attack – PyPI users are being targeted by an email phishing attack attempting to trick them into logging into a fake PyPI site. This post from the Security Engineer at PyPI discusses what’s happening and what you should do about it. There’s also a follow-up post.
- PyCon NL 2025 - Call for Papers
- Django in Action - Christopher Trudeau - Code ladjango40
Topics:
- Python Audio Processing With
pedalboard
– The pedalboard library for Python is aimed at audio processing of various sorts, from converting between formats to adding audio effects. This post summarizes a PyCon US talk onpedalboard
and its uses. - Smuggling Arbitrary Data Through an Emoji – Unicode includes flexibility through the use of variation selectors. These include the ability to change characters through a consecutive series of coding points. But, when used with code points that don’t need them, they’re ignored, so you can hide data in them.
- Don’t Call Dunder Methods – It’s best to avoid calling dunder methods. It’s common to define dunder methods, but uncommon to call them directly.
- Inheritance Over Composition, Sometimes – In an older post, Adrian wrote some code using inheritance. He got questions from his readers asking why it wouldn’t just be simpler to use functions. This post re-implements the code with inheritance, composition, and plain old functions, then compares the approaches.
Projects:
- html-to-markdown: HTML to Markdown Converter
- curlify: A library to convert Python requests request object to curl command
- transfunctions: Support Both Sync and Async
Additional Links:
- Working with Audio in Python (feat. Pedalboard) - Peter Sobot - YouTube
- Python’s Magic Methods: Leverage Their Power in Your Classes – Tutorial