Курс 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. Копирование файлов с shutil()
  2. Поиск шаблона в строке
  3. Сортировка данных с лямбда-функциями
  4. Обмен переменными в Jupyter
  5. Копирование и вставка текста в Python
  6. Именованные кортежи в Python
  7. Справка по импортированным модулям
  8. Функция enumerate() — Python
  9. Подчеркивание в REPL
  10. Метод bool() в Python
  11. Форматирование данных с помощью pprint
  12. Работа со строками в Python
  13. Область видимости переменных
  14. Работа с YAML в Python
  15. Профилирование кода
  16. Модуль sys: основы
  17. Проверка на палиндром
  18. Асинхронное программирование с asyncio
  19. Условное добавление элементов в список
  20. Безопасные SQL-запросы в Python 3.11
  21. Обработка исключений в Python 3
  22. Работа с Requests для HTTP-запросов
  23. Перемещение и удаление файлов в Python
  24. Concrete Paths — метод .with_suffix()
  25. ChainMap избыточные ключи
  26. Логирование с Logzero
  27. Расчет времени выполнения
  28. Проверка наличия элемента в списке
  29. Обновление ключей в Python
  30. Форматирование строк в Python
  31. Работа с Enum в Python3.
  32. Работа с парами ключ-значение
  33. Модуль xkcd: добавление юмора в Python
  34. Многострочные строки в Python
  35. Работа с argparse
  36. Избегайте ошибку FileNotFoundError
  37. Группировка элементов в словарь
  38. Наиболее частотные элементы с помощью Counter
  39. Методы classmethod и staticmethod
  40. Генераторы в Python
  41. Очистка входных данных
  42. Равенство и идентичность в Python
  43. Моржовый оператор в Python 3.8
  44. Вложенные циклы в Python
  45. f-строки в формате строк
  46. Очистка вывода в Python
  47. Python Enumerate

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