类型提示一个枚举属性,该属性返回该枚举的实例

时间:2019-12-14 01:31:14

标签: python-3.x enums type-hinting

我有一个看起来像这样的枚举:

class Direction(Enum):
    NORTH = 0
    EAST = 1
    SOUTH = 2
    WEST = 3

    @property
    def left(self) -> Direction:
        new_direction = (self.value - 1) % 4
        return Direction(new_direction)

    @property
    def right(self) -> Direction:
        new_direction = (self.value + 1) % 4
        return Direction(new_direction)

我正在尝试提示leftright属性,以指示它们的返回值是Direction类型。

我认为上面的方法可以工作,但是当我运行代码时,出现以下错误:NameError: name 'Direction' is not defined。我想这是因为Python解释器在定义此函数时尚不知道Direction枚举是什么。

我的问题是,无论如何我是否可以键入提示这些属性?谢谢。

1 个答案:

答案 0 :(得分:1)

这被称为前向引用,因为执行属性函数签名时尚未定义Direction类。您需要在引用中加引号。有关更多信息,请参见https://www.python.org/dev/peps/pep-0484/#forward-references

from enum import Enum

class Direction(Enum):
    NORTH = 0
    EAST = 1
    SOUTH = 2
    WEST = 3

    @property
    def left(self) -> 'Direction':
        new_direction = (self.value - 1) % 4
        return Direction(new_direction)

    @property
    def right(self) -> 'Direction':
        new_direction = (self.value + 1) % 4
        return Direction(new_direction)