Найти в Дзене
Python Pro🐍

Что за self, для чего он нужен? Простое и понятное обьяснение

Yo, кодеры и будущие хакеры! Если вы хоть раз открывали чужой код на Python или пробовали создать свой первый класс, то наверняка видели это загадочное слово: self. Оно есть почти в каждой функции внутри классов, и поначалу кажется, что это какая-то магия. Что это? Зачем оно нужно? И почему без него ничего не работает? Сегодня я раз и навсегда объясню, что такое self простыми словами, без заумных терминов. Наша аналогия — это чертёж дома. Представьте, что вы — архитектор, и у вас есть чертёж дома (House). На этом чертеже написано, что у дома есть адрес и количество этажей, а ещё он умеет показывать информацию о себе. class House:
def show_info():
# Здесь будет ошибка!
print("Это дом по адресу...") Если вы попробуете создать несколько домов по этому чертежу и заставить их «показывать информацию», Python выдаст ошибку. Почему? Потому что функция show_info() не знает, к какому именно дому она относится. Она не знает, "кто" её вызывает. И вот тут на сцену выходит self.
Оглавление

Yo, кодеры и будущие хакеры!

Если вы хоть раз открывали чужой код на Python или пробовали создать свой первый класс, то наверняка видели это загадочное слово: self. Оно есть почти в каждой функции внутри классов, и поначалу кажется, что это какая-то магия. Что это? Зачем оно нужно? И почему без него ничего не работает?

Сегодня я раз и навсегда объясню, что такое self простыми словами, без заумных терминов. Наша аналогия — это чертёж дома.

Что такое self? Это как «этот конкретный дом»

Представьте, что вы — архитектор, и у вас есть чертёж дома (House). На этом чертеже написано, что у дома есть адрес и количество этажей, а ещё он умеет показывать информацию о себе.

class House:
def show_info():
# Здесь будет ошибка!
print("Это дом по адресу...")

Если вы попробуете создать несколько домов по этому чертежу и заставить их «показывать информацию», Python выдаст ошибку. Почему? Потому что функция show_info() не знает, к какому именно дому она относится. Она не знает, "кто" её вызывает.

И вот тут на сцену выходит self.

self — это как ссылка на тот конкретный объект, который в данный момент выполняет функцию. Можно перевести это как «этот конкретный дом».

Давайте исправим наш код:

class House:
def __init__(self, address, floors):
self.address = address
self.floors = floors

def show_info(self):
print(f"Это дом по адресу {self.address}, у него {self.floors} этажа.")

# Создаём два дома по одному чертежу
house1 = House("ул. Кодеров, 10", 3)
house2 = House("ул. Питона, 5", 5)

# Просим каждый дом рассказать о себе
house1.show_info()
house2.show_info()

Что здесь происходит?

Когда вы вызываете house1.show_info(), Python автоматически передаёт объект house1 в качестве первого аргумента в функцию show_info(). Внутри функции этот объект получает имя self. Поэтому self.address становится "ул. Кодеров, 10".

Когда вы вызываете house2.show_info(), происходит то же самое, но теперь self — это объект house2, и self.address становится "ул. Питона, 5".

Главное правило: self всегда первый

Вы заметили, что в коде def show_info(self) мы указали self, хотя при вызове house1.show_info() ничего не передавали? Это потому, что Python делает это автоматически. self всегда должен быть первым аргументом в любой функции внутри класса, которая обращается к его свойствам.

Проще говоря:

  • self — это как зеркало для объекта. Он позволяет объекту видеть и использовать свои собственные данные (адрес, количество этажей).
  • Без self функции внутри класса были бы как команды без исполнителя.

Итоговый босс-файт

Теперь вы знаете, что self — это не магия, а простое и логичное правило. Это способ, с помощью которого Python помогает объектам управлять своими собственными данными.

Ваш следующий квест:

  1. Создайте класс Car (Автомобиль) с атрибутами make (марка) и model (модель).
  2. Добавьте метод drive(self), который будет выводить: "Еду на [марка] [модель]."
  3. Создайте два объекта Car и заставьте их «ехать».

Поделитесь своим результатом в комментариях!