Sobes.tech
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__ полезен, когда нужно оптимизировать память и ограничить набор атрибутов, но снижает гибкость класса.