Прежде всего я хотел бы, чтобы вы знали, что я читаю разные темы: cycli c import, подсказки циклического типа и так далее. Согласно этому ответу мы можем заметить, что:
Состояния хранят ссылку на объект контекста, который их содержит.
И мне нужны именно такие решение. Итак, я подготовил два демонстрационных файла: 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 (циклический c импорт). С другой стороны, мне нужны подсказки типа. Кроме того, я могу удалить подсказки ноутбука из заголовков метода (но они мне нужны) или сделать их в виде строк, то есть «ноутбук». Или, может быть, я вообще не должен передавать обратную ссылку на контекст (класс Laptop)?
Как решить эту проблему?