Курс 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. Установка и использование Logzero
  2. Гибкие функции Python
  3. Работа со строками в Python
  4. Преобразование символов с помощью map
  5. Обязательные аргументы в Python
  6. Возврат нескольких значений
  7. Работа с deque из collections
  8. Операции со строками в Python
  9. Использование модуля __future__
  10. Генераторы и сеты в Python
  11. Генераторы в Python
  12. Зарезервированные слова в Python
  13. Вычисление логарифмов в Python
  14. Howdoi — получение ответов из терминала
  15. Область видимости переменных в Python
  16. Метод setdefault() в Python
  17. Подписка на Kaspersky Team
  18. Стать Python-разработчиком
  19. Операторы += в Python
  20. Освобождение памяти в Python
  21. Сортировка HTML по CSS-селектору
  22. Ускорение обработки данных с %autoawait
  23. Подсчет элементов в списке с Counter
  24. Метод join() для объединения элементов
  25. Введение в Python
  26. Операции с числами в Python
  27. Объединение объектов в Python
  28. Метод matmul для умножения матриц
  29. Документирование функций в Python
  30. Функция reduce() в Python
  31. ChainMap.new_child() — добавление нового словаря
  32. Обработка исключений в Python
  33. Сокращение ссылок с pyshorteners
  34. Работа с defaultdictами в Python
  35. Оптимизация методов в Python 3.7
  36. Мощь вложенных функций в Python
  37. Расширение операции побитового «и» в Python
  38. Создание и использование ChainMap
  39. Порядок и длина множеств в Python
  40. Функция enumerate() в Python
  41. Хеширование паролей с солью
  42. Установка виртуального окружения Python
  43. Defaultdict в Python
  44. Работа с очередями в Python
  45. Управление IP-адресами через прокси
  46. Передача словаря через **kwargs
  47. Отслеживание выполнения программы с библиотекой tqdm

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