Рубрики
Без рубрики

Python Slots на помощь

Не так давно я обнаружил, что Python реализует паттерн слотов. Они позволяют вам ограничить аттро … Tagged с помощью Python, Objectiented, памяти, классов.

Не так давно я обнаружил, что 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”