init - метод, который используется при инициализации объекта класса. Например, у вас есть
class A:
def init(self, name, surname):
self.name = name
self.surname = surname
Затем далее вы где то хотите создать объект класса. Вы пишете:
obj = A('IVAN', 'IVANOV')
То есть вы обязаны передать значения имени и фамилии в конструктор.
self - позволяет обращаться к своим полям внутри класса. Например, далее в вышеуказанном классе у вас есть другой метод, который должен возвращать имя и фамилию для принта:
def namesurname(self):
return self.name + " "+self.surname
Использовать self и init необходимо при работе с ООП. При создании класса объявляете конструктор из полей, которые вы хотите инициализировать вместе с созданием экземпляра этого класса.
Ну и вот, встретил на просторах интернета:
dark: у котов внутри есть мурчалка
dark: она реализована для всех котов в классе кот
dark: в объекте кот надо как то вызвать метод мурчало у класса кот
dark: как ты это сделаешь?
dark: кот.мурчало()
dark: ежели ты вызовешь кот.мурчало(), муркнут сразу все коты на свете
dark: а ежели ты вызовешь self.мурчало(), муркнет только тот кот, на которого указывает self