self - это первый формальный параметр любого метода, использующийся в качестве указателя на текущий объект. Если ты в этой фразе чего-то не понял, значит, тебе еще рановато заниматься этой темой, расслабься пока.
Self - это всего лишь название первого параметра функции, являющейся методом объекта. И если ты не понимаешь, что такое "класс", "объект", "метод", self тебе ни в каком виде не нужен. Любые аналогии, не использующие эти термины - лишь информационный мусор, создающий заведомо ложную иллюзию понимания при полном отсутствии реального понимания.
Именно self не нужен - это просто общепринятое название для параметра, в котором передаётся объект.
Когда вызывается метод объекта, первым параметром в этот метод ВСЕГДА передаётся сам объект, для которого вызван метод. И договорились называть этот параметр self - не потому, что он обязан так называться (можно использовать любое имя), а исключительно для удобства тех, кто будет читать твой код.
Допустим, у тебя есть чертеж машины. По этому чертежу можно создать много машин, но каждая будет своя: со своим цветом, пробегом, уровнем топлива.
Так вот, self — это как "эта конкретная машина". Когда ты работаешь с ней, self помогает понять, что ты меняешь или проверяешь именно её характеристики, а не какие-то общие.
Без self машина не поймёт, что речь идёт именно о ней, и всё сломается.