Не так давно я обнаружил, что Python реализует паттерн слотов. Они позволяют ограничить атрибуты, которые класс может иметь после его инстанции.
Приведенный ниже код работает, но он может привести к повышению поведения:
class Camera: exposure = '1ms' cam = Camera() cam.exposure_time = '10ms'
Поскольку Python позволяет создавать атрибуты классов во время выполнения, пользователь нашего Камера
Класс может, случайно использовать неправильное имя и никогда не осознавать ошибки. Есть много способов избежать этой проблемы, но сегодня я обсуждаю о слоты
. Мы можем изменить наш класс:
class Camera: __slots__ = ['exposure', ] exposure = '1ms'
Если мы повторим то, что мы делали ранее, теперь мы получим ошибку:
>>> cam = Camera() >>> cam.exposure_time = '10ms' ... AttributeError: 'Camera' object has no attribute 'exposure_time'
Что, я полагаю, является очень описательной ошибкой.
Используя слоты
имеет также преимущество уменьшения следа памяти наших объектов. Если мы собираемся создать миллионы объектов камеры одновременно (например, размышления о запросах на обработку сервера), может быть разумно оптимизировать объявление атрибутов.
Вы знали о слотах? Вам когда -нибудь приходилось использовать их в своем коде?
Оригинал: “https://dev.to/aquicarattino/python-slots-to-the-rescue-iib”