枚举属性的类型注释

新手上路,请多包涵

我有这段代码:

 import enum

class Color(enum.Enum):
    RED = '1'
    BLUE = '2'
    GREEN = '3'

def get_color_return_something(some_color):
    pass

如果我想我将从 Color 枚举中接收枚举属性(例如: Color.RED ),如何正确地将类型注释添加到此函数中的 some_color 变量?

原文由 Yuval Pruss 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 2.6k
2 个回答

提示 Color 类应该起作用的类型:

 def get_color_return_something(some_color: Color):
    print(some_color.value)

原文由 ibarrond 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以尝试使用带有类型提示 Literal 的选项。

PEP8 官方文档 我们知道:

字面量它是一种类型,可用于向类型检查器指示相应的变量或函数参数具有与提供的字面量(或多个字面量之一)等效的值

因此,如果您需要为函数参数使用某些特定值,这将是最佳选择之一。但是由于枚举值的类型,这种方法不会像我们预期的那样完全起作用。每个值都有一个 Enum 类类型。这意味着对于下面的代码示例,我们将能够将 Color.GREEN 作为函数参数。所以这样的解决方案将只是开发人员的信息,而不是函数参数的强制性规则。

 class Color(enum.Enum):
    RED = '1'
    BLUE = '2'
    GREEN = '3'

print(type(Color.RED)  # will return <enum 'Color'>

代码示例:

 from enum import Enum
from typing import Literal

class Color(Enum):
    RED = '1'
    BLUE = '2'
    GREEN = '3'

def some_function(some_color: Literal[Color.RED, Color.BLUE]) -> None:
    pass

第二个选项是 @ibarrond 从 上面的帖子 中提供的完全正确的解决方案,只有一个类类型提示。

 some_color: Color

因此,您可以在此处根据需要选择要使用的选项。

从我的角度来看,我们可以尝试为开发人员指定可能的 Enum 值,以便在我们对功能的要求中更加明确。

原文由 unit 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题