Курс 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. Подсчет элементов в Python
  2. Избегание изменяемых аргументов
  3. Определение индекса элемента списка
  4. Обработка ошибок в Python
  5. Явный импорт переменных
  6. Проверка версии Python
  7. Распаковка аргументов в Python
  8. Поиск HTML-элементов с BeautifulSoup
  9. Определение относительного пути
  10. Отладчик pdb: начало работы
  11. Импорт модулей и пакетов в Python
  12. Принципы программирования
  13. Игра «Виселица» на Python
  14. Применение функции к элементам списка
  15. Работа с Path в Python
  16. Объединение множеств в Python
  17. Метод __imod__ для Python
  18. Логирование с Loguru
  19. Обработка StopIteration в Python
  20. Обработка исключения UnboundLocalError
  21. Переопределение унарных операторов
  22. Группировка элементов Python
  23. Уникальные значения из списка
  24. Справка по импортированным модулям
  25. Генерация случайных чисел в Python
  26. Логический оператор «and» в Python
  27. Работа с часовыми поясами в Python.
  28. Работа с Event() в threading
  29. Python 3.12: переиспользование кавычек
  30. Вычисление фазы комплексного числа
  31. Фильтрация последовательности
  32. Определение имен функций
  33. Управление фоновыми задачами в Python
  34. Сортировка и разворот списка
  35. Фильтрация данных в Python.
  36. Метод pop() списка
  37. Python: динамическая типизация и проверка типов
  38. Переопределение метода __or__()
  39. Логические значения в Python
  40. Обработка ошибок в Python
  41. Удаление дубликатов с сохранением порядка с помощью dict.fromkeys
  42. Инвертирование словаря
  43. Бинарный поиск
  44. Операторы объединения в Python 3.9

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