如何在Python中记录和使用类似枚举的数据类型?

5 投票
2 回答
4172 浏览
提问于 2025-04-17 02:54

假设现在的代码是用字符串来作为参数,并且你想要记录这些参数的有效值。

举个例子

def MyFunc(region = None):
    if region in ['A','B','C', None]:
        # dosomething
    else:
        # complain about invalid parameter

现在的问题是,我该如何改进这个设计,以解决两个问题:

  • 能够在开发环境中使用自动补全功能,自动填充参数的可能值。

  • 记录参数的有效值列表(目前代码是用doxygen来记录的)。

2 个回答

2

从3.4版本开始,Python支持枚举类型(Enums):https://docs.python.org/3.4/library/enum.html

4

这里有一个类似的问题:

在Python中如何表示'Enum'?

它建议实现类似这样的东西:

class MyClass :
    A = 0   """The Letter A"""
    B = 1   """The Letter B"""
    C = 2   """The Letter C"""
    D = 3   """The Letter D"""

variable = MyClass.A    # Ok
variable = MyClass.E    # Error

这样你在使用IDE时也能享受到自动补全的功能。(这和S.Lott的看法相反,我一直在用... 这可能是我老习惯于Java的缘故)。

用文档字符串来重复显而易见的内容被认为是风格不佳,我觉得在这种情况下反而让代码的可读性变差。想了解更多关于文档字符串的信息,可以查看:

http://www.python.org/dev/peps/pep-0257/

如果你想知道为什么Python没有枚举类型,可以看看这个PEP:

http://www.python.org/dev/peps/pep-0354/

撰写回答