我有一个看起来像这样的枚举:
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)
我正在尝试提示left
和right
属性,以指示它们的返回值是Direction
类型。
我认为上面的方法可以工作,但是当我运行代码时,出现以下错误:NameError: name 'Direction' is not defined
。我想这是因为Python解释器在定义此函数时尚不知道Direction
枚举是什么。
我的问题是,无论如何我是否可以键入提示这些属性?谢谢。
答案 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)