用作 return 类型时无法识别枚举名称

Enum name not recognized when used as a return type

我有这个 Python 3.7 代码:

from enum import Enum, auto

class MyClass:
    def calculate(self, data: str):
        new_state: Optional[State] = self._get_state(data)

    def _get_state(self, data: str) -> State:
        state: State = State.DEFAULT
        return state

class State(Enum):
    DEFAULT = auto()
    STATE_1 = auto()

PyCharm _get_state 方法的 return 类型有问题,报告:Unresolved reference 'State'。当我尝试 运行 代码时,我得到 NameError: name 'State' is not defined.

但是,State 引用 calculate 方法中的 new_state: Optional[State] = _get_state()_get_state 方法中的 state: State = State.DEFAULT 工作得很好。

这是为什么?

函数签名中的类型注释在定义 class 时计算,而不是在调用它们时计算。所以在定义MyClass.

之前需要先定义Stateclass

函数体中的注解在函数被调用之前不会被处理,这就是它们仍然以任一顺序工作的原因。