Курс 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. Работа с URL-адресами в Python
  2. Объединение словарей в Python
  3. Конвертация текстовых чисел с помощью Numerizer
  4. Получение текущей директории
  5. Управление ресурсами с контекстными менеджерами
  6. Defaultdict в Python
  7. Обезопасьте ввод данных
  8. Регулярные выражения в Python
  9. Инверсия списка/строки в Python
  10. Управление контекстом выполнения
  11. Аннотации типов в Python
  12. Работа с YAML в Python
  13. Поиск индекса элемента
  14. Возврат нескольких значений
  15. Перехват исключений в Python
  16. Работа с модулем bisect
  17. Иерархия классов в Python
  18. Печать месячного календаря
  19. Множественное назначение в Python
  20. Сортировка данных с лямбда-функциями
  21. Counter() — подсчет элементов
  22. Склеивание строк без циклов
  23. Отрицательные индексы списков
  24. Форматирование вывода списков
  25. Функции any() и all() в Python
  26. Строковое представление объектов
  27. Разделение функций на этапы
  28. Отображение HTML кода в Python
  29. Основы работы со строками в Python
  30. Генераторы в Python
  31. Работа с геоданными с помощью geopy
  32. Поиск простых чисел
  33. Docstring в Python
  34. Удаление и повторная вставка ключа в OrderedDict
  35. Метод classmethod
  36. Фильтрация последовательности
  37. Гибкие функции Python
  38. Именованные срезы в Python
  39. Magic Commands — улучшение работы с Python
  40. Конвертация коллекций в Python.
  41. Копирование словарей и списков в Python
  42. Обновление ключей в Python
  43. Генераторы в Python
  44. Форматирование данных с помощью pprint
  45. Работа с f-строками 2.0

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