When I start introducing Python I use this chart [1]:

Five Dimensions of Python:

Here's a Level 2 topic I've been recently working on:

https://nbviewer.org/github/4dsolutions/m4w/blob/main/gadzooks.ipynb

I know, we don't all love those __ribs__ (special names), however that's a 
benefit of Free Open Source: you can fork and adapt, take the best ideas, 
and leave the rest.

This one is about how implementing __add__ gets you default behavior 
for __iadd__ with no extra work, with the option to go on to add your
own __iadd__.

Kirby


[1] example of me doing that:

https://github.com/4dsolutions/clarusway_data_analysis/blob/main/python_warm_up/warmup_python_intro.ipynb

coming from:

https://nbviewer.org/github/4dsolutions/clarusway_data_analysis/blob/main/DAwPy_S1_%28Numpy_Arrays%29/daily_schedule.ipynb

(Exhibit: some Python teaching in the wild....)