По умолчанию каждый объект в Python хранит свои атрибуты в словаре
__dict__.Это удобно — но не всегда эффективно.
p = Point(1, 2, 3)
p.__dict__
# {'x': 1, 'y': 2, 'z': 3}
Любой новый атрибут добавляется прямо в этот словарь:
p.w = 4
Но что если вам нужно экономить память или ускорить доступ к атрибутам?
🌠 Используем
__slots__Добавим в класс:
class Point:
__slots__ = ('x', 'y', 'z')
Теперь:
✔️ можно создавать только перечисленные атрибуты
❌ нельзя добавлять новые (
p.w = 4 → AttributeError)❌ у объекта нет
__dict__✔️ память тратится значительно меньше
✔️ доступ к атрибутам быстрее
Используйте __slots__, если:
• создаёте тысячи или миллионы объектов
• у вас tight loops с частыми обращениями к атрибутам
• важно уменьшить память (например, при обработке больших файлов)
Во всех остальных случаях проще оставить обычный
__dict__.🐸 Библиотека питониста
#буст