Улучшение шаблона проектирования состояния с обратной ссылкой на контекст - PullRequest
0 голосов
/ 17 января 2020

Прежде всего я хотел бы, чтобы вы знали, что я читаю разные темы: 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)?

Как решить эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...