Центральный объект и архитектурные идеи - 52AnTIMateria812/Plyer GitHub Wiki
Под капотом plyer использует паттерн Proxy (заместитель) совместно с ленивой инициализацией (Lazy Initialization).
В исходном коде plyer есть абстрактный класс Facade. Когда разработчик делает from plyer import battery, он не импортирует Windows-версию или Linux-версию класса. Он экспортирует экземпляр объекта-прокси Proxy('battery').
Механика ленивой загрузки
Архитектура загрузки выглядит так:
- Вызов метода
battery.status. - Объект
Proxyпроверяет, была ли уже загружена платформа. - Если нет,
plyerанализирует переменную среды (например,PLYER_PLATFORM) или самостоятельно определяет ОС черезsys.platform. - Подгружается специфичный модуль
plyer.platforms.win.batteryилиplyer.platforms.linux.battery. - Вызов делегируется реальному объекту.
Архитектурная выгода
Благодаря этому решению в памяти приложения находятся только те платформозависимые библиотеки, которые реально нужны для работы программы на конкретной ОС. Это обеспечивает экстремальное снижение потребления памяти и высокую скорость старта приложения (Application Startup Time).