Урок 68. Атрибуты объекта и класса

📁 Блок: Python Fundamentals / OOP ⏱️ Время изучения: ~90 мин 🎯 Сложность: Средняя
#classmethod #staticmethod #print #str #repr #class #def #keys #vars #split #return #isinstance #len #and #from #import #round #map #mkdir #if #not #or #raise #try #except #as #add #del #append

⚡ Кратко: суть урока

Урок про разницу между атрибутами класса и атрибутами объекта, способы доступа к ним, а также про методы, которые работают с классом (@classmethod) и не зависят от экземпляра (@staticmethod). В конце — строковые представления объектов через __str__ и __repr__.

  • Атрибут класса общий для всех объектов; атрибут объекта принадлежит конкретному экземпляру.
  • Присваивание через объект создаёт новый атрибут объекта, а не меняет атрибут класса.
  • @classmethod получает cls, @staticmethod не получает ни self, ни cls.
  • __str__ — для пользователя, __repr__ — для разработчика и отладки.

Что запомнить: object.attr сначала ищет атрибут в объекте, а если не находит — в классе.

Частая ошибка: изменить поле класса через объект и удивиться, что другие объекты не увидели изменения.

О чём этот урок

Мы уже умеем создавать классы и инициализировать поля объектов в __init__. Теперь разберёмся, как хранить данные, общие для всего класса, — атрибуты класса. Учимся читать и изменять их, отличать от атрибутов объекта, использовать служебный атрибут __dict__, а также применять @classmethod и @staticmethod. В финале — магические методы __str__ и __repr__, которые делают вывод объектов понятным.

Что изучим

  • Атрибуты класса и объекта: где создавать и как искать.
  • Чтение, изменение и затенение атрибутов класса.
  • Атрибут __dict__ и порядок разрешения имён.
  • Значения по умолчанию для полей объекта.
  • Классовые методы @classmethod и альтернативные конструкторы.
  • Статические методы @staticmethod для вспомогательной логики.
  • Строковые представления: __str__ и __repr__.
  • Современные практики: аннотации типов, ClassVar, @dataclass.

📚 Что повторить перед изучением

  • ← Урок 67 — Summary session 17
  • Создание класса, метод __init__, параметр self, создание объектов.
  • Обращение к полям и методам объекта через точку.

🎯 Что изучать дальше

  • Следующий урок будет добавлен позже.
  • Попрактикуйтесь в создании классов с атрибутами и методами для собственных предметных областей.
  • Изучите встроенные функции getattr, setattr, hasattr для динамической работы с атрибутами.