Классы и dataclasses в Python: ООП без лишнего кода
Классы, атрибуты, методы, наследование, dataclass. Для опытных: Self (3.11), @override (3.12), slots=True и что разрешили в __slots__ в 3.15.
- Описывать сущности классами
- Сокращать код через dataclass
- Ловить ошибки переопределения через @override
விரிவுரையின் தொடக்கம்
Опечатка «amout» — и отчёт молча врёт
- dict: набор ключей не фиксирован
- Класс: поля объявлены заранее
- Ошибка — в момент обращения, а не в отчёте
Помните, трата у нас хранится в словаре? Где-то в глубине отчёта кто-то пишет get с ключом amout — без буквы n — и значением по умолчанию ноль. Никакой ошибки: словарь не знает, какие ключи правильные, и честно возвращает ноль. Итог за месяц занижен, и никто не понимает почему. Если же трата — объект своего класса с объявленными полями, такая опечатка мгновенно упадёт с подсказкой из прошлой лекции. Давайте построим этот класс.
row = {"item": "Кофе", "amount": 250}
print(row.get("amout", 0)) # 0 — тишина
expense = Expense("Кофе", 250)
expense.amout
# AttributeError: 'Expense' object has no attribute
# 'amout'. Did you mean '.amount' instead of '.amout'?
Класс — чертёж, объект — изделие
- class — описание типа
- Объект (экземпляр) — конкретная трата
- __init__ заполняет поля нового объекта
- self — ссылка на сам объект
Класс — это чертёж. Он описывает, какие поля есть у траты и что с ней можно делать. А объект — конкретное изделие по этому чертежу: кофе за двести пятьдесят, такси за триста. Специальный метод с двумя подчёркиваниями вокруг слова init вызывается при создании объекта и раскладывает переданные значения по полям. А слово self внутри методов означает «этот самый объект», с которым сейчас работаем. Его Python подставляет сам.
class Expense:
def __init__(self, item: str, amount: float,
category: str = "Прочее"):
self.item = item # поля объекта
self.amount = amount
self.category = category
coffee = Expense("Кофе", 250) # объект
taxi = Expense("Такси", 300, "Транспорт")
print(coffee.item, taxi.amount)
Методы и __repr__: объект, который умеет и рассказывает
- Метод — функция внутри класса, первый аргумент self
- __repr__ — как объект выглядит в print и отладчике
- Без __repr__: <__main__.Expense object at 0x7f...>
Данные без действий — полдела. Методы — это функции, живущие внутри класса: трата может сама посчитать свою сумму с налогом. Вызываются через точку, и Python сам передаёт объект первым аргументом. А ещё полезно научить объект себя показывать. По умолчанию print выведет загадочный адрес в памяти. Специальный метод repr возвращает понятную строку, и отладка сразу становится приятнее: в списке трат видно, что это за траты.
class Expense:
def __init__(self, item: str, amount: float):
self.item = item
self.amount = amount
def with_vat(self, rate: float = 0.2) -> float:
return self.amount * (1 + rate)
def __repr__(self) -> str:
return f"Expense({self.item!r}, {self.amount})"
e = Expense("Кофе", 250)
print(e, e.with_vat())
முழு விரிவுரை சந்தா மூலம் கிடைக்கும்
முழு பதிப்பில் மேலும் 9 ஸ்லைடுகள் உள்ளன.
உள்நுழைந்து சந்தா பெற்ற பிறகு வீடியோ, அனைத்து ஸ்லைடுகள், குறிப்புகள், தேர்வுகள், AI ஆசிரியர் மற்றும் நேர்காணல் திறக்கும்.
உள்நுழை அல்லது பதிவு செய் சந்தா பெறுவிரிவுரை உள்ளடக்கம்
- Опечатка «amout» — и отчёт молча врёт
- Класс — чертёж, объект — изделие
- Методы и __repr__: объект, который умеет и рассказывает
- @dataclass: класс без шаблонного кода
- @property: вычисляемое поле
- Наследование: месячный отчёт на базе обычного
- Миф: ООП — это всегда глубокие иерархии
- ❓ Стоп-проверка: что сломается?
- 💡 Разбор: FrozenInstanceError и dataclasses.replace
- Что нового: Self (3.11) и @override (3.12)
- Что нового: __slots__ для наследников tuple (3.15)
- Итог: трата — dataclass, отчёт — класс с итогом
இந்தப் பாடம் தொடர்பான கட்டுரைகள்
- Python-இல் வகுப்புகளும் OOP-உம்: __init__, self, முறைகள், மரபுரிமை மற்றும் dataclass
- Windows, macOS மற்றும் Linux-இல் Python-ஐ எப்படி பதிவிறக்கி நிறுவுவது: படிப்படியான வழிகாட்டி
- Python-இல் சரங்கள்: split, replace, strip, join, துண்டிப்புகள் (slices) மற்றும் f-சரங்கள்
- Python தொகுதிகளும் தொகுப்புகளும் (packages): import, pip, venv மற்றும் நூலகங்கள் எளிய சொற்களில்
- பூஜ்ஜியத்திலிருந்து Python கற்றுக்கொள்வது எப்படி: தொடக்கநிலையாளருக்கான படிப்படியான கற்றல் திட்டம்
இந்தப் படிப்பின் அனைத்து விரிவுரைகள்
- Python 3.15 с нуля и для опытных: что нового и как учить
- Python 3.15: установка, REPL и первый скрипт за десять минут
- Переменные, числа и строки в Python: f-строки и t-строки
- Условия, циклы и match/case в Python: управляем ходом программы
- Списки, кортежи, словари и множества: frozendict в Python 3.15
- Comprehensions в Python: распаковка * и ** внутри (PEP 798)
- Функции и аннотации типов в Python: от def до sentinel
- Ошибки и исключения в Python 3.15: читаем трейсбек и подсказки «Did you mean»
- Модули, пакеты и ленивые импорты в Python 3.15 (PEP 810)
- Файлы, JSON и CSV в Python: pathlib и UTF-8 по умолчанию
- Классы и dataclasses в Python: ООП без лишнего кода
- Асинхронность и потоки в Python: asyncio, TaskGroup и free-threading
- Профилирование Python 3.15: Tachyon вместо cProfile и итоговый проект