Я заинтересован в моделировании устройства в Python. Давайте возьмем камеру, например, с двумя различными режимами работы, то есть режим фото и видео. В общем, методы из режима фото не должны вызываться при активном режиме видео и наоборот. И. е. Нельзя изменять частоту кадров (fps) в режиме видео в режиме фотосъемки.
Одной из идей реализации этого устройства с ограниченным доступом к другим режимам является создание класса контроллера, который управляет связью между компоненты внутри камеры (открыть / закрыть последовательные порты, выполнить тесты оборудования и т. д. c.). Внутри класса контроллера реализованные режимы (режим фото и видео) могут быть назначены контроллеру, а режимы могут быть реализованы как собственные классы / библиотеки.
Допустимый набор команд может быть:
# Python 3
CameraController = Controller() # Creates an instance of the controller class 'Controller'
CameraController.open() # Opens all communication ports and other things
CameraController.PhotoMode.open() # Opens/Initializes the photo mode
CameraController.PhotoMode.take_picture() # Command of photo mode to take a picture
# It would be necessary to close the actual mode and to initialize the alternative mode
CameraController.VideoMode.open() # Should give a warning/error/closes automatically the PhotoMode
CameraController.VideoMode.take_video() # Command of video mode to take a video
Этого можно добиться, манипулируя методом __getattribute__(self, *args, **kwargs)
встроенного класса объектов в Python и проверяя (до оценки методов или свойств), активен ли запрошенный режим или нет.
Кто-нибудь знает другой подход к моделированию заявленного поведения? Я провел некоторое исследование по inte rnet, но не нашел лучшего решения для такого рода проблем. Я хотел бы узнать, как реализовать это поведение наиболее распространенным способом. Также приветствуются другие распространенные подходы из других языков программирования, поскольку портируемость кода иногда важна.