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