То что self задаётся аргументом явно — это как раз вполне логично. В питоне в отличие от руби любой метод в классе — это изначально полноправный объект. Теоретически вы можете создать простую функцию, использовать её, а потом присвоив атрибуту класса, сделать её тем самым его методом. Чтобы такая функция могла получить доступ к экземпляру класса, он её должен быть как то передан, и поэтому экземпляр как первый атрибут это логично.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.