Hardslots

Что такое slots в классе?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

__slots__ — атрибут класса, ограничивающий атрибуты экземпляров и экономит memory (без __dict__ на instance).

class Point:
    __slots__ = ('x', 'y')

    def __init__(self, x, y):
        self.x, self.y = x, y

p = Point(1, 2)
p.x            # 1
# p.z = 3     # AttributeError — нет slot z
# p.__dict__  # AttributeError — нет __dict__
  • Каждый атрибут хранится как slot descriptor — значительно меньше memory (для миллионов instances);
  • Быстрее attribute access;
  • Ограничения: нельзя наследоваться от классов без __slots__ (добавится __dict__); weakref slot нужно добавить явно (__weakref__);
  • Default values нельзя задать в __slots__ — через descriptors;
  • Dataclasses с slots=True (Python 3.10) — auto-generate;
  • Для повседневного кода не нужно, для hot paths (миллионы instances) — критично.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.