By making the self reference explicit, you're free to refer to any object by that self reference. Also, such a way of playing with classes at runtime is harder to do in the more static languages - not that's it's. For a language-agnostic consideration of the design decision, see what is the advantage of having this/self pointer mandatory explicit?.

See why do i get 'takes exactly 1 argument (2 given)' when trying to call a method? For the opposite problem.