我有这段代码:
import enum
class Color(enum.Enum):
RED = '1'
BLUE = '2'
GREEN = '3'
def get_color_return_something(some_color):
pass
如果我想从Color枚举中接收值(例如:some_color
),如何在此函数的Color.RED
变量中正确添加类型注释?
答案 0 :(得分:5)
提示Color类应该工作的类型:
def get_color_return_something(some_color: Color):
print(some_color.value)
答案 1 :(得分:1)
def get_color_return_something(some_color: Color):
pass
答案 2 :(得分:0)
另一个奇怪的句法解决方法是使用引用的前向引用语法(每个 PEP 484)将 Enum 成员指定为 Enum 类的类型:
from enum import Enum
class ETest(Enum):
EXAMPLE: 'ETest' = "example" <--- forward referenced type
def example() -> ETest:
return ETest.EXAMPLE
print(type(ETest.EXAMPLE.value))
<class 'str'>
在下图中,很明显 PyCharm 中突出显示的警告不再存在。
作为参考,以下是 PyCharm 对将 EXAMPLE
成员指定为 <str>
类型的不满的屏幕截图:
我不是粉丝或这种方法,但它确实摆脱了警告。
答案 3 :(得分:-1)
您可以这样打印名称和值:
import enum
class Color(enum.Enum):
RED = '1'
BLUE = '2'
GREEN = '3'
def get_color_return_something(some_color):
print(some_color.name)
print(some_color.value)
get_color_return_something(Color.RED)
# RED
# 1
答案 4 :(得分:-2)
以下内容适用于Pyton 3.9 / PyCharm
from enum import Enum
from typing import Optional, Union
class Color(Enum):
RED: int = 1
GREEN: int = 2
def guess_color(x: Union[Color.RED, Color.GREEN]) -> Optional[ValueError]:
if x == Color.RED:
print("Gotcha!")
else:
return ValueError(f"It's not {Color.RED}")
guess_color(Color.RED)