Мастерство Python __slots__: оптимизация памяти и скорости
Python class slots — это особенность, о которой не многие программисты знают. В slotted-классе мы явно определяем поля, которые наш класс может иметь, используя магическое имя поля __slots__. Это имеет некоторые преимущества:
- Объекты, созданные из класса, займут немного меньше памяти
- Быстрее доступ к атрибутам класса
- Вы не можете случайно добавлять новые атрибуты к объектам slotted-класса
Вот пример того, как определить slotted-класс:
>>> class Card:
... __slots__ = 'rank', 'suite'
... def __init__(self, rank, suite):
... self.rank = rank
... self.suite = suite
...
>>> qh = Card('queen', 'hearts')
Для меня главное преимущество — невозможность случайно добавлять новые атрибуты к slotted-классу. Это может предотвратить дорогие ошибки! Для демонстрации: опечатка при назначении атрибута slotted-классу выбросит ошибку вместо того, чтобы Python молча создавал новый атрибут.
Для маленьких классов без сложного наследования использование slots может быть преимуществом. Особенно когда вам нужно создать много экземпляров такого класса, экономия памяти и более быстрый доступ к атрибутам могут сделать разницу.
Наконец, просто чтобы вы знали, вы можете комбинировать эту технику с data classes тоже!
Python
- Освоение типов данных в Python: практическое руководство
- Мастерство операторов Python: Полное руководство
- Оператор pass в Python: практическое руководство
- Аргументы функций в Python: позиционные, именованные и параметры по умолчанию
- Словари в Python: создание, манипуляции и продвинутые техники
- Пользовательские исключения в Python: практическое руководство
- Объектно-ориентированное программирование в Python: классы, наследование, инкапсуляция и полиморфизм
- Итераторы в Python: как они работают и как создать свои
- Замыкания в Python: как вложенные функции захватывают переменные
- Модуль datetime в Python: практическое руководство по датам, времени и часовым поясам