如何在Python中记录和使用类似枚举的数据类型?
假设现在的代码是用字符串来作为参数,并且你想要记录这些参数的有效值。
举个例子
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
这里有一个类似的问题:
它建议实现类似这样的东西:
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: