Улучшение паттерна проектирования состояний с обратной ссылкой на контекст
Прежде всего, я хотел бы, чтобы вы знали, что я читал разные темы о: циклическом импорте, подсказках типа цикла и так далее. Согласно этому ответу мы можем заметить, что:
Состояния хранят ссылку на объект контекста, который их содержит.
И мне нужно именно такое решение. Итак, я подготовил два демонстрационных файла, state.py:
from abc import ABC, abstractmethod
class State(ABC):
@abstractmethod
def set_screen_brightness(self, computer: Laptop) -> None:
pass
class PowerSupplyOn(State):
def set_screen_brightness(self, computer: Laptop) -> None:
computer._set_max_brightness()
class PowerSupplyOff(State):
def set_screen_brightness(self, computer: Laptop) -> None:
computer._set_min_brightness()
и laptop.py:
from states import *
class Laptop:
def __init__(self) -> None:
self.state = PowerSupplyOn()
self.adjust_brightness_screen()
def adjust_brightness_screen(self) -> None:
self.state.set_screen_brightness(self)
def _set_max_brightness(self) -> None:
print('Brightness level: 100%')
def _set_min_brightness(self) -> None:
print('Brightness level: 15%')
Ближе к делу - я застрял. Конечно, я не могу импортировать ноутбук внутри state.py (циклический импорт). С другой стороны, мне нужны подсказки типа. В качестве альтернативы я могу удалить подсказки для портативных компьютеров из заголовков методов (но они мне нужны) или сделать их строками, то есть "Ноутбук". Или, может быть, мне вообще не следует передавать обратную ссылку на контекст (класс ноутбука)?
Как решить эту проблему?