Перейти к основному содержимому
Основы Python2026-07-29 · 12 мин чтения

Классы и объекты Python: руководство 2026 г.

Большинство руководств по ООП Python изучают синтаксис и пропускают мысленную модель. Этот делает обратное — вы уходите с четким представлением о том, что есть класс во время выполнения, когда следует использовать @dataclass вместо того, чтобы писать __init__ вручную, и как на самом деле работает self (это не волшебство).

Мы рассмотрим: минимальный жизнеспособный класс из четырех строк, почему self является параметром, атрибуты класса и экземпляра (ошибка новичка №1), шесть методов dunder, которые вы увидите повсюду, @dataclass как современное значение по умолчанию и жесткое правило, когда следует оставить классы в покое и использовать простую функцию.

Ментальная модель: класс — это фабрика

Класс в Python — это фабрика, производящая объекты. Каждый раз, когда вы вызываете Rect(3, 4), Python создает новый объект со своим собственным хранилищем и возвращает его вам.

▶ PYTHONeditable · runs in your browser

Вот и вся механика. Класс — это план; каждый вызов Rect(...) — это запись проекта в новую оперативную память.

self — это просто параметр

Путаница №1 для людей, пришедших из JS или Ruby: self в Python явно. Первый параметр каждого метода — это ссылка на вызываемый экземпляр.

▶ PYTHONeditable · runs in your browser

Таким образом, c.bump() — это синтаксический сахар для Counter.bump(c). Python передает экземпляр в качестве первого аргумента. Вы можете назвать это «me», «this» или «foo» — «self» — это соглашение, а не ключевое слово. Придерживайтесь «self» (PEP 8), чтобы другие разработчики Python могли прочитать ваш код.

Ловушка атрибутов класса и экземпляра

Самая распространенная ошибка ООП Python в кодовой базе для начинающих:

▶ PYTHONeditable · runs in your browser

items = [] в области класса создает ОДИН список, общий для каждого экземпляра. a.add("milk") изменяет его, поэтому b.items видит тот же список.

Правило: инициализировать изменяемое состояние в `__init__`, а не в области класса.

▶ PYTHONeditable · runs in your browser

Эта ошибка внедрялась в производство больше раз, чем может признать любой разработчик Python. Следите за списками, словарями и наборами в области класса.

Шесть методов, которые вы увидите повсюду

Методы Dunder (__name__) — это перехватчики операторов Python. Эти шесть охватывают 95% того, с чем вы столкнетесь:

1. __init__(self, ...) — конструктор

Запускается при создании объекта. Установите здесь атрибуты экземпляра. Ничего не возвращайте (Python требует «Нет»).

2. __repr__(self) — строка, предназначенная для разработчика

Вызывается print(x), если __str__ отсутствует, и всегда через REPL. Стремитесь к чему-то, что вы могли бы вставить обратно в Python, чтобы воссоздать объект:

▶ PYTHONeditable · runs in your browser

3. __eq__(self, Other) — равенство

Без него Rect(3, 4) == Rect(3, 4) возвращает False (по умолчанию — тождество). Сравните поле за полем:

▶ PYTHONeditable · runs in your browser

4. __hash__(self) — хешируемость

Если вы переопределите __eq__, вы ДОЛЖНЫ также переопределить __hash__, иначе Python установит __hash__ = None (объект станет нехешируемым). Самый простой: return hash((self.width, self.height)).

5. __len__(self) — для len(obj)

Заставляет работать len(cart) == 5.

6. __iter__(self) — для for x в obj:

Вернуть итератор. yield внутри делает класс итеративным:

▶ PYTHONeditable · runs in your browser

@dataclass — современный стандарт по умолчанию

Если ваш класс в основном является хранителем данных (три поля, __init__, __repr__, __eq__), прекратите писать этот шаблон. @dataclass генерирует все это из ваших аннотаций типов:

▶ PYTHONeditable · runs in your browser

Это сгенерированные __init__, __repr__ и __eq__. Добавьте @dataclass(frozen=True), чтобы сделать объект неизменяемым И получить __hash__ бесплатно.

Правило: сначала найдите `@dataclass`. Создавайте классы, созданные вручную, только в том случае, если вам нужны методы, которые не являются методами доступа к атрибутам.

__slots__ — оптимизация памяти (расширенная)

По умолчанию каждый экземпляр содержит __dict__, поэтому вы можете добавлять произвольные атрибуты. __slots__ меняет местами фиксированную структуру уровня C — меньший объем оперативной памяти и более быстрый доступ к атрибутам:

▶ PYTHONeditable · runs in your browser

Используйте __slots__, когда: (а) вы создаете миллионы экземпляров и оперативная память имеет значение, или (б) вы хотите отловить опечатку в назначении атрибута во время выполнения. В противном случае пропустите его — он по умолчанию отключает Pickle и тонкими способами нарушает множественное наследование.

Когда лучше оставить занятия в покое

Жесткое правило: если в вашем классе есть ОДИН метод плюс `__init__`, вероятно, это должна быть функция.

▶ PYTHONeditable · runs in your browser

Классы приобретают свой вес, когда они сохраняют state при нескольких вызовах методов или когда они реализуют четко определенный протокол (__iter__, __enter__, __eq__ и т. д.). Одноразовая логика — это функция.

Наследование — используйте его экономно

Наследование реально, но им злоупотребляют. В Python 2026 отдайте предпочтение композиции — сохраните другой объект в качестве атрибута, а не наследуйте его:

▶ PYTHONeditable · runs in your browser

Наследуйте только тогда, когда у вас есть настоящие отношения «есть» И вы хотите переопределить поведение. NamedRect, который наследуется от Rect для добавления поля name, подойдет. Построение пятиуровневой иерархии наследования для класса бизнес-логики — это код, который вы разберетесь за 6 месяцев.


Классы — одна из самых мощных функций Python, и одну из самых простых в использовании. Ментальная модель, которая помогает: класс — это фабрика для объектов, self — это простой параметр, изменяемое состояние находится в __init__, сначала нужно обратиться к @dataclass и вернуться к функции всякий раз, когда класс имеет менее двух методов, переносящих состояние.

Следующий шаг: 30 практических уроков ООП, охватывающих классы, @dataclass, наследование против композиции и методы dunder — с реальным Python, работающим в вашем браузере, и наставником по искусственному интеллекту на каждом этапе.

Готовы попробовать?

15 уроки бесплатно после бесплатной регистрации — без карты. Попробуйте платформу, а затем принимайте решение.

Начни бесплатно →

Or unlock every lesson

Pro — $12/mo, unlimited AI, cancel any time. Refund within 14 days worldwide.

See Pro plans →

Get one Python lesson + one career idea every Friday

No spam, no "buy our course now". Three bullets, every Friday. Unsubscribe with one click.