Этап 6 из 11 · ≈ 8 ч

Атрибуты, дескрипторы и создание объектов

Основа с Middle

__new__ и __init__, __eq__ и __hash__, __getattr__ и __getattribute__, дескрипторы.

Что важно знать

  • __new__ создаёт объект, __init__ его настраивает.
  • Равные объекты обязаны иметь равные хеши.
  • property — это дескриптор.

Критерии освоения

Middle ≈ 8 ч

  • Объясняет порядок создания объекта и когда нужен __new__
  • Согласует __eq__ и __hash__ и понимает, почему изменяемый объект не стоит делать хешируемым
  • Объясняет поиск атрибута и то, как на дескрипторах построены property и методы

Практика. Написать дескриптор с проверкой типа для полей класса и сравнить его с property.

Проверка знаний

Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.

Вопросы с собеседований

Смотреть все
Чем __new__ отличается от __init__?Middle

__new__ — статический метод, создаёт и возвращает экземпляр (вызывается первым). __init__ — инициализирует уже созданный объект и ничего не возвращает. __new__ переопределяют редко: подклассы неизменяемых типов (int, str, tuple), синглтоны и кэши экземпляров…

Полный разбор
Как связаны __eq__ и __hash__ и что значит «хешируемый объект»?Middle

Хешируемый объект имеет хеш, неизменный за всё время жизни, и сравнивается через __eq__. Правило: равные объекты обязаны иметь равные хеши. Если класс переопределяет __eq__ без __hash__, Python ставит __hash__ = None — экземпляры становятся нехешируемыми.

Полный разбор
Чем __getattr__ отличается от __getattribute__?Middle

__getattribute__ вызывается при каждом обращении к атрибуту — это сам механизм поиска. __getattr__ вызывается только если атрибут не найден обычным путём. Для прокси, ленивых атрибутов и обёрток используют __getattr__ — он безопаснее и дешевле.

Полный разбор
Что такое дескриптор и как на нём построены property и методы?Middle

Дескриптор — объект в атрибуте класса, у которого есть __get__ (и, возможно, __set__, __delete__). При обращении obj.attr Python вызывает эти методы вместо простого чтения. На дескрипторах построены property, методы (функции — дескрипторы), staticmethod…

Полный разбор
Что такое @property и зачем он нужен?Junior

@property превращает метод в атрибут: снаружи obj.area, внутри — вычисление или проверка.

Полный разбор
Что такое __slots__ и когда его использовать?Middle

__slots__ = ("x", "y") заменяет у экземпляров словарь __dict__ на фиксированные ячейки: объект занимает в несколько раз меньше памяти, доступ к атрибутам чуть быстрее, а добавить новый атрибут нельзя (AttributeError).

Полный разбор

Разборы темы

← Вся карта «Python»

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования