Курс Python → Оптимизация памяти с __slots__

Использование атрибута __slots__ в Python может значительно сократить объем памяти, необходимый для каждого экземпляра класса. Вместо использования словаря для хранения атрибутов, Python создает небольшой массив фиксированного размера, что уменьшает накладные расходы на каждый объект. Это особенно полезно при работе с большим количеством экземпляров классов или при ограниченных ресурсах памяти.

Однако, использование атрибута __slots__ имеет свои ограничения. Например, при использовании __slots__ мы не можем динамически добавлять новые атрибуты к экземпляру класса. Все атрибуты должны быть объявлены заранее в списке __slots__. Это ограничение может быть преимуществом, так как предотвращает случайные опечатки при создании новых атрибутов, но может быть недостатком в некоторых случаях.

Кроме того, классы с атрибутом __slots__ не могут использовать множественное наследование. Это означает, что классы, использующие __slots__, могут наследоваться только от одного родительского класса. Для некоторых приложений это может быть ограничивающим фактором, поэтому необходимо внимательно оценить, подходит ли использование __slots__ для конкретного случая.

class MyClass:
    __slots__ = ['attribute1', 'attribute2']

    def __init__(self, value1, value2):
        self.attribute1 = value1
        self.attribute2 = value2

obj = MyClass(10, 20)
print(obj.attribute1, obj.attribute2)  # Вывод: 10 20

Пример выше демонстрирует использование атрибута __slots__ в классе MyClass. Здесь мы объявляем список атрибутов, которые будут доступны для каждого экземпляра класса. При создании экземпляра MyClass мы можем установить значения этих атрибутов и обращаться к ним как к обычным атрибутам объекта.

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Документация функции help() в Python
  2. Работа с пакетами
  3. Подсчет элементов с помощью Counter из collections
  4. Оператор «is not» в Python
  5. Удаление файлов и папок в Python
  6. JMESPath в Python
  7. Работа с файлами в Python
  8. Декораторы в Python
  9. Названия столбцов в Python таблицах
  10. UserString в Python
  11. Метод __getitem__ в Python
  12. Создание уникального проекта
  13. Получение размера объекта с sys.getsizeof()
  14. Аннотации типов в Python
  15. Переопределение метода __and__
  16. Фильтрация входных данных в Python
  17. Активация Matplotlib в Jupyter
  18. Преобразование объекта в строку
  19. Управление виртуальными средами в Python
  20. Отправка POST-запроса в REST API
  21. Оптимизация поиска в словарях
  22. Модуль xkcd: загрузка комиксов
  23. Цикл for в Python
  24. Модуль itertools: эффективная работа с итераторами
  25. Работа с Requests для HTTP-запросов
  26. Работа со строками в Python
  27. Метод rsub в Python: расширение функциональности вычитания
  28. Уникальные значения из списка
  29. Поиск с библиотекой Google
  30. Прокачанный трейсинг ошибок
  31. Непрерывная проверка в Python
  32. Значения по умолчанию в Python
  33. Метод join() для объединения элементов
  34. Преобразование строки в число
  35. Разрешение имен в Python
  36. Философия Python
  37. Python reversed() vs срез[::-1]
  38. Нарезка списков в Python
  39. Многострочные комментарии в Python
  40. Оператор морж в Python 3.8
  41. Именование столбцов в Python с pandas
  42. Операторы объединения в Python 3.9
  43. Глобальные переменные в Python
  44. Метод ior для битовых операций
  45. Поиск шаблона в начале строки
  46. Удаление элемента из списка в Python
  47. Основы работы со строками в Python
  48. Константы в модуле cmath

Marketello читают маркетологи из крутых компаний