Definitions: Sometimes parent classes (aka superclasses) are base classes. By extension, sometimes child classes (aka subclasses) are derived classes or extensions (no pun intended).
Analogy & Diagrams + Other Resource: Just like how a person's family tree can be more of a web or starburst, the inheritance network of a multiple-inheritance scheme of Python classes can be represented with branches on either side of a class (but directionality is always that child classes can access parent attributes and methods, but parent classes canNOT access child attributes and methods).
Some diagrams and explanation can be found here: https://www.programiz.com/python-programming/multiple-inheritance
RPG Example from Video: The inheritance network in the video is something like this: (class object) / | \ (class Sneaky) (class Agile) (class Character) \ | / (class Thief)
Remember that the class object is the ultimate ancestor. Thief is an extension of base classes Sneaky, Agile, and Character. Thus, it has access to methods and attributes from Sneaky, Agile, and Character. In more intuitive or colloquial wording in the context of RPGs, a Thief is a Character who potentially possesses the qualities Sneaky and Agile.
Something that Kenneth mentioned but didn't really get into in this video is that we can create RPG classes/jobs that are extensions of Thief (which is probably why the file is named thieves, plural). Specifically, he mentioned "assassin" and "ninja." For these RPG jobs, we can make classes Assassin and Ninja as extensions of Thief since we'll probably want instances of them to initialize similar to how Thief instances initialize and possibly have the pickpocket skill (I imagine that being dextrous means that assassins and ninjas can easily learn to pickpocket even if we don't usually associate thieving with assassins and ninjas!).
Didn't the "Kenneth" thief example initialize just fine when character came first in the tuple, though? What was gained from changing it?