Back to questions
Junior — Middle
50
Чем отличается класс, использующий __slots__, от обычного класса без него?
Answer from AI
sobes.tech AI
Класс с использованием __slots__ в Python ограничивает набор атрибутов, которые могут быть у экземпляров этого класса. Это позволяет:
- Экономить память, так как не создаётся словарь
__dict__для каждого объекта. - Ускорять доступ к атрибутам.
В обычном классе каждый объект хранит свои атрибуты в словаре __dict__, что даёт гибкость, но требует больше памяти и времени на поиск атрибутов.
Пример:
class WithoutSlots:
def __init__(self, x):
self.x = x
class WithSlots:
__slots__ = ['x']
def __init__(self, x):
self.x = x
obj1 = WithoutSlots(10)
obj2 = WithSlots(10)
print(hasattr(obj1, '__dict__')) # True
print(hasattr(obj2, '__dict__')) # False
Таким образом, __slots__ полезен, когда нужно оптимизировать память и ограничить набор атрибутов, но снижает гибкость класса.