Курс 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. Функция divmod() в Python
  2. Применение функций в Python
  3. Оптимизация параметров в Python
  4. Enum в Python: создание и использование перечислений
  5. Библиотека Rich: форматирование текста
  6. Поиск анаграмм с Counter
  7. Логирование с Logzero
  8. Запрос пароля с помощью getpass
  9. Возврат нескольких значений
  10. Операторы объединения в Python 3.9
  11. Поиск индексов в списке
  12. Порядок операций в Python
  13. Реализация операции -= для пользовательского класса
  14. Numpy: объединение массивов
  15. Python groupby() из itertools: работа с повторяющимися элементами
  16. Генерация UUID в Python
  17. Обратный список чисел
  18. Замена элементов в списке с помощью генераторов списков
  19. Запуск внешнего кода в Jupyter
  20. Функция enumerate() в Python
  21. Применение функции к списку
  22. Преобразование Excel в PDF с Spire.XLS
  23. Работа с collections.Counter
  24. SciPy: широкий функционал для математических операций
  25. Освоение Python
  26. Функции с дополнением
  27. Работа со строками в Python
  28. Работа с процессами в Python
  29. Методы __repr__ и __str__ в Python
  30. Ноутбуки AMD Ryzen ™ 4000: мощность и эффективность
  31. Множества и frozenset
  32. Открытие и редактирование скриптов Python
  33. Использование функции product
  34. Генерация фальшивых данных с Faker
  35. Лимиты на ресурсы Python
  36. Работа с аргументами командной строки в Python
  37. Генерация случайных данных в NumPy
  38. Работа с NumPy массивами
  39. Основы работы с os
  40. Иерархия классов в Python
  41. Метод join для наборов
  42. Получение размера объекта с sys.getsizeof()
  43. Получение текущей даты и времени
  44. Работа с *args и **kwargs в Python
  45. Участие в сообществе @selectel
  46. Сортировка данных в Python

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