Центральный объект и архитектурные идеи - 52AnTIMateria812/Plyer GitHub Wiki

Под капотом plyer использует паттерн Proxy (заместитель) совместно с ленивой инициализацией (Lazy Initialization).

В исходном коде plyer есть абстрактный класс Facade. Когда разработчик делает from plyer import battery, он не импортирует Windows-версию или Linux-версию класса. Он экспортирует экземпляр объекта-прокси Proxy('battery').

Механика ленивой загрузки

Архитектура загрузки выглядит так:

  1. Вызов метода battery.status.
  2. Объект Proxy проверяет, была ли уже загружена платформа.
  3. Если нет, plyer анализирует переменную среды (например, PLYER_PLATFORM) или самостоятельно определяет ОС через sys.platform.
  4. Подгружается специфичный модуль plyer.platforms.win.battery или plyer.platforms.linux.battery.
  5. Вызов делегируется реальному объекту.

Архитектурная выгода

Благодаря этому решению в памяти приложения находятся только те платформозависимые библиотеки, которые реально нужны для работы программы на конкретной ОС. Это обеспечивает экстремальное снижение потребления памяти и высокую скорость старта приложения (Application Startup Time).