Что такое self в Python и зачем он в каждом методе?
Только начал разбираться с классами. Не понимаю, что за self пишут первым аргументом в каждом методе и почему его не передают при вызове. Объясните на пальцах, пожалуйста.
3 ответа
self — это сам объект, у которого вызвали метод. Когда ты пишешь dog.bark(), Python под капотом превращает это в Dog.bark(dog) и подставляет твой объект первым аргументом. Поэтому ты его не передаёшь руками — Python делает это за тебя.
Зачем он нужен: через self метод обращается к данным конкретного объекта. У одного пса кличка "Рекс", у другого "Шарик" — оба хранятся в self.name, но self у них разный, поэтому и значения разные:
class Dog:
def __init__(self, name):
self.name = name
def bark(self):
print(f"{self.name}: гав!")
rex = Dog("Рекс")
rex.bark() # Рекс: гав!
Без self метод не знал бы, с каким именно объектом он работает.
Грубо говоря, self = "этот конкретный объект". Имя self не зарезервировано, можно назвать как угодно, но по соглашению всегда пишут self. Не нарушай это, иначе люди не поймут твой код.
Это ссылка на текущий экземпляр.