Курс 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. Работа с zip-архивами в Python
  2. Модуль math: основные функции
  3. Считывание бинарного файла в Python
  4. Ускорение обработки данных с %autoawait
  5. Python reversed() vs срез[::-1]
  6. Хранение данных с помощью dataclasses
  7. Работа с файлами в Python
  8. Сортировка данных с лямбда-функциями
  9. Создание пар из последовательностей
  10. 9 уловок для чистого кода
  11. Docstring в Python
  12. Преобразование генераторов в циклы
  13. Получение частей дроби
  14. Работа с enumerate()
  15. Переопределение метода
  16. Оператор «not» в Python
  17. Создание и операции с дробями
  18. Роль object и type в Python
  19. Функция print() — вывод информации
  20. Регистрация на хакатоне
  21. Создание новых функций с помощью functools.partial
  22. Обновление данных через PUT запрос
  23. Работа с итераторами в Python
  24. Сортировка элементов в Python
  25. Команда %dhist — список посещенных каталогов
  26. Объединение итераторов
  27. Распаковка элементов массива
  28. Работа со строками в Python
  29. Декоратор защиты анонимных пользователей
  30. Преобразование данных в Python
  31. Особенности множеств в Python
  32. Функция с *args.
  33. GitHub в Telegram: подписка на уведомления
  34. Многострочные комментарии в Python
  35. Документация функции help() в Python
  36. Получение пути к текущему скрипту с помощью os
  37. Однострочники Python
  38. Создание словаря с значением по умолчанию
  39. Тест скорости набора текста на Python
  40. Модуль Antigravity в Python 3
  41. Возврат значений из генератора
  42. Добавление элементов в список: append() vs extend()
  43. Работа с базами данных SQLite
  44. Глобальные переменные в Python
  45. Создание новых списков в Python
  46. Объединение строк с помощью метода join

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