Why must 'self' be used explicitly in method definitions and calls?
First, it's more obvious that you are using a method or instance attribute instead of a local variable...
Second, it means that no special syntax is necessary if you want to explicitly reference or call the method from a particular class...
Finally, for instance variables it solves a syntactic problem with assignment: since local variables in Python are (by definition!) those variables to which a value assigned in a function body (and that aren't explicitly declared global), there has to be some way to tell the interpreter that an assignment was meant to assign to an instance variable instead of to a local variable, and it should preferably be syntactic (for efficiency reasons)...