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 подскажет развёрнутый ответ в реальном времени.