Self is a mysterious thing when you start creating classes in Python. In this video you learn why methods have self as first parameter and how Python passes a value for it automatically when calling the method.
If the name denotes a valid class attribute that is a function object, a method object is created by packing (pointers to) the instance object and the function object just found together in an abstract object: this is the method object.
When the method object is called with an argument list, a new argument list is constructed from the instance object and the argument list, and the function object is called with this new argument list.