JustCaptain kod-buduschego
a46a0b3d44d05e2b1c3a7547bc0aff6f8f404145
Перейти к файлу
Код
kod-buduschego Python 2025-20264.1. Классы и объектыMATERIAL.md
anc update c70a58f 8 октября 2026 г.
MATERIAL.md

Классы в Python: зачем они нужны и как их понимать

Большинство новичков сталкиваются с классами и думают:

«Зачем усложнять код, если можно использовать функции и переменные?»

Это нормальный вопрос. Чтобы понять классы, сначала нужно понять проблему, которую они решают.

⸻

  1. Мир без классов

Представим игру.

Есть персонаж.

hero_name = "Артур"
hero_hp = 100
hero_damage = 20

Теперь появился второй персонаж.

hero1_name = "Артур"
hero1_hp = 100
hero1_damage = 20
hero2_name = "Мерлин"
hero2_hp = 80
hero2_damage = 35

Появился третий.

hero3_name = "Ланселот"
hero3_hp = 120
hero3_damage = 15

Через некоторое время код превращается в хаос.

У каждого персонажа десятки параметров:

hero1_level
hero1_gold
hero1_weapon
hero1_mana
hero2_level
hero2_gold
hero2_weapon
hero2_mana
...

Возникает вопрос:

Как хранить много однотипных объектов?

Классы решают именно эту проблему.

⸻

  1. Что такое класс

Класс — это чертёж объекта.

Пример из жизни.

Чертёж автомобиля:

  • двигатель
  • колёса
  • цвет
  • скорость

Сам чертёж не является автомобилем.

По нему можно создать много автомобилей.

⸻

В Python:

class Car:
pass

Мы создали чертёж.

Но автомобилей пока нет.

⸻

  1. Что такое объект

Объект — это экземпляр класса.

Создадим автомобиль.

class Car:
pass
car1 = Car()

Теперь car1 — объект класса Car.

⸻

Можно создать ещё.

car2 = Car()
car3 = Car()

Один класс.

Много объектов.

⸻

  1. Конструктор init

Когда создаётся объект, часто нужно сразу задать данные.

Для этого используется метод:

init()

Пример:

class Car:
def init(self, color):
self.color = color

Создание:

car = Car("красный")

Теперь объект хранит цвет.

print(car.color)

Вывод:

красный

⸻

  1. Что такое self

Самый непонятный момент для новичков.

Рассмотрим:

class Car:
def init(self, color):
self.color = color

Когда создаётся объект:

car = Car("красный")

Python внутри делает примерно так:

Car.init(car, "красный")

Получается:

self = car

То есть:

self

это ссылка на текущий объект.

⸻

Поэтому запись:

self.color = color

означает:

сохранить значение внутри этого объекта.

⸻

  1. Атрибуты объекта

Атрибут — это переменная внутри объекта.

Пример:

class Student:
def init(self, name, age):
self.name = name
self.age = age

Создание:

s = Student("Иван", 15)

Обращение:

print(s.name)
print(s.age)

Вывод:

Иван
15

⸻

  1. Методы объекта

Метод — это функция внутри класса.

Пример:

class Dog:
def init(self, name):
self.name = name
def bark(self):
print("Гав!")

Создание:

dog = Dog("Рекс")

Вызов метода:

dog.bark()

Вывод:

Гав!

⸻

Метод может использовать данные объекта.

class Dog:
def init(self, name):
self.name = name
def bark(self):
print(self.name, "говорит гав")

Результат:

Рекс говорит гав

⸻

  1. Интересный пример: космический корабль

Вместо стандартных собак и машин.

class SpaceShip:
def init(self, name, fuel):
self.name = name
self.fuel = fuel
def fly(self):
if self.fuel >= 10:
self.fuel -= 10
print(self.name, "улетел")
else:
print("Недостаточно топлива")

Создание:

falcon = SpaceShip("Falcon", 50)
falcon.fly()
falcon.fly()
print(falcon.fuel)

Вывод:

Falcon улетел
Falcon улетел
30

Каждый объект хранит своё состояние.

⸻

  1. Почему классы лучше словарей

Можно сделать так:

player = {
"name": "Артём",
"hp": 100
}

Это работает.

Но поведение приходится писать отдельно.

def attack(player):
...

Когда объектов становится сотни:

  • игроки
  • монстры
  • питомцы
  • оружие
  • задания

код начинает расползаться.

Класс объединяет:

  • данные
  • поведение

в одном месте.

⸻

  1. Реальный пример: аккаунт банка

class BankAccount:
def init(self, owner, money):
self.owner = owner
self.money = money
def deposit(self, amount):
self.money += amount
def withdraw(self, amount):
if amount <= self.money:
self.money -= amount

Использование:

acc = BankAccount("Анна", 1000)
acc.deposit(500)
acc.withdraw(300)
print(acc.money)

Результат:

1200

⸻

  1. Магия объектов

Каждый объект независим.

class Robot:
def init(self, energy):
self.energy = energy

Создадим:

r1 = Robot(100)
r2 = Robot(50)

Изменим только первого:

r1.energy -= 30

Проверяем:

print(r1.energy)
print(r2.energy)

Вывод:

70
50

У каждого объекта свои данные.

⸻

  1. Класс как фабрика

Представь фабрику по производству дронов.

Класс:

class Drone:
...

Каждый новый дрон:

d1 = Drone()
d2 = Drone()
d3 = Drone()

Это изделия одной модели.

Класс = модель.

Объект = конкретный экземпляр.

⸻

  1. Когда классы действительно нужны

Не для каждого кода.

Плохо:

class Sum:
pass

Если нужно просто сложить два числа, класс не нужен.

⸻

Классы полезны, когда есть сущности с состоянием.

Например:

  • игроки
  • автомобили
  • роботы
  • банковские счета
  • заказы интернет-магазина
  • сообщения чата
  • космические корабли
  • нейросети
  • датчики умного дома

⸻

  1. Самый жизненный пример

Представь Discord.

Каждый пользователь имеет:

имя
аватар
статус
список друзей

И умеет:

отправлять сообщения
добавлять друзей
менять статус

Это идеально описывается классом.

class User:
...

Каждый аккаунт — отдельный объект.

⸻

  1. Главное определение

Класс можно запомнить одной фразой:

Класс — это шаблон для создания объектов, который объединяет данные (атрибуты) и действия (методы).

Схема:

Класс
│
├─ Атрибуты
│ ├─ имя
│ ├─ возраст
│ └─ уровень
│
└─ Методы
├─ атаковать()
├─ лечиться()
└─ двигаться()

Создание объекта:

player = Player("Макс", 15)

После этого объект сам хранит свои данные и умеет выполнять действия через методы.

Именно поэтому практически весь крупный Python-код — от игр до Telegram-ботов, веб-сервисов, нейросетей и операционных систем — активно использует классы. Без них становится сложно управлять большим количеством связанных данных и логики.