the thing is, self being explicit makes it more consistent
unlike 'self' in other languages as a keyword, 'self' is just a variable with the same scoping.
i.e self always refers to the most inner scope in other languages (a special variable), meanwhile self in python is
wherever self was bound in the current scope.
and fwiw: len is a holdover from earlier python (you can define a method __len__ if you want...)
i.e you write 4+2 to add things not 4.add(2)