Курс 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. Numpy: использование Ellipsis
  2. Эффективная конкатенация строк в Python
  3. Работа с Enum в Python3.
  4. Переопределение метода __pow__
  5. Официальный канал Python в Telegram
  6. Работа с timedelta в Python
  7. Чтение бинарного файла в Python.
  8. Генераторы в Python
  9. Оператор «and» в Python
  10. Работа с областями видимости переменных
  11. Python 3.12: переиспользование кавычек
  12. Выражения-генераторы в Python
  13. Проверка типов с использованием isinstance
  14. Структуры данных в Python
  15. Функции с дополнением
  16. Функции all и any в Python
  17. Генерация QR-кодов с библиотекой qrcode
  18. Установка переменной среды в Python
  19. Создание спинбокса в tkinter
  20. Сериализация данных в JSON с помощью json.dumps
  21. Генераторы списков
  22. Функция reduce() из модуля functools
  23. Сокращение ссылок с pyshorteners
  24. Транспонирование 2D-массива с помощью zip
  25. Определение относительного пути
  26. Импорт модуля из другого каталога
  27. Профилирование с cProfile
  28. Декоратор @override
  29. Решение переменной Шредингера
  30. Проверка списка: any() и all()
  31. kwargs в Python
  32. Декоратор Property в Python
  33. Оператор in в Python
  34. Обновление и получение данных в SQLite
  35. Округление в Python
  36. Моржовый оператор в Python 3.8
  37. Работа с эмодзи в Python
  38. Именованные срезы в Python
  39. Преобразование строк в числа с плавающей запятой
  40. Сложение матриц в NumPy
  41. Работа с комплексными числами
  42. Оператор Walrus: правильное использование
  43. Управление User-Agent в Python
  44. Множественное наследование в Python
  45. Хэш-функции и метод цепочек
  46. Модуль sys: основы
  47. Перемешивание списка с shuffle()
  48. Копирование словарей и списков в Python

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