Before reading this article I highly recommend reading the Introduction to Grammar first, in order to understand the first principles of how programming langauges work.
In python everything is an object, the object has a type and a reference count, the main difference between things in Python is the type of each object, a class is just another word for type, so classes define custom types, a metaclass is something that allows you to define a different type for a class, so if you have:
class Jon:
...
It will have type Jon, but if you want the class to have a different type you can do:
class Anny(type):
...
class Jon(metaclass=Anny):
...
Now the Class Jon will have type Anny instead of Jon. It's possible to change the behaviors with init and new, which are dunder methods, each object in python is going to have a set of these methods, and objects are callable based on the call method. So the easiest way to think about python is that everything is an object and objects can become callable (functions) through the call method (there is a specific function type though that is used to define functions), garbage collection (freeing memory) happens based on the reference count of each object.
Flow of execution of CPython's compiler
The following pictures show the flow of execution of the function names and their location in the CPython's compile process as of the time this article was written.