в него попадает название экземпляра класса
Экземпляр может быть безымянным (например, лежать в списке), но идея в принципе верна - в self попадает
id объекта:
class A:
def f(self):
print(self)
print(hex(id(self)))
a = A()
a.f()
не понимаю зачем нужен атрибут self
Не уверен, что понимаю вопрос - настолько очевиден ответ, к тому же следующий прямо за вопросом. Смотрите на это как на синтаксический сахар: при вызове метода вы пишете
экземпляр.метод(аргументы)
, а в реализации
def метод(экземпляр, аргументы)
. Имя первого аргумента вообще-то произвольное, обычно пишут "self", но python3 допускает даже русский идентификатор "экземпляр", можете попробовать.