Python:关联标签、常量名称和整数,无需硬编码值

标签 python enums

我正在寻找一种关联方式:

  • 人类可读的标签:“选项一” 甚至 u'Première option'
  • “常量名称”:OPTION_ONE
  • 整数值(从 0 开始)

鉴于:

  • 代码将标签列表传递给某个 API,然后将其显示给用户
  • API 返回一个整数值,该值是用户选择在上述序列中的索引
  • 我想稍后将此整数值与常量名称之一(或从常量名称快速派生的名称)进行比较
  • 我希望能够轻松地在序列中插入/删除/重新排序标签
  • 我不想对任何整数值进行硬编码(如果需要的话,0 除外)。

当然这是为了让代码看起来干净,所以需要合理的简洁。这应该使用标准库在 Python 2.7 中运行。

最佳答案

使用命名元组的解决方案:

  • 首先定义一个小函数

    from collections import namedtuple
    
    def createOpts(name,pairs):
        # namedtuple('FooType',['OPTION1',...,'OPTIONn','labels']
        optsclass=namedtuple(name+'Type',[symbol for symbol,label in pairs]+['labels'])
        # FooType(0,..,n-1,['Option 1',...,'Option N']) 
        opts=optsclass(*(range(len(pairs))+[[label for symbol,label in pairs]]))
        return opts
    
  • 选项定义如下的列表

    Options=createOpts('Opt',[('OPTION1','Option one'),('OPTION2','Options two'),('OPTION3','Option three'),])
    
  • 然后在代码中就这样使用。

    print type(Options)
    print 'Option labels:',Options.labels
    print 'Option one:',Options.OPTION1
    print 'Option two compares to 1:',1==Options.OPTION2
    print 'Option 2 in set:', 1 in [Options.OPTION2,Options.OPTION3]
    print 'Option 1 not in set:', 0 not in [Options.OPTION2,Options.OPTION3]
    
    <class '__main__.OptType'>
    Option labels: ['Option one', 'Options two', 'Option three']
    Option one: 0
    Option two compares to 1: True
    Option 2 in set: True
    Option 1 not in set: True
    

关于Python:关联标签、常量名称和整数,无需硬编码值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51410366/

相关文章:

java - Jackson 枚举反序列化

java - JAX-RS : Suppress Error Message

python - [字符串变量]>打印特殊字符

python - 对象创建后立即调用方法

C++ 外部枚举

java - Java 枚举的性能?

python - 如何循环遍历每个Excel工作表名称

Python - 正则表达式获取括号之间的数字

python - 如何在 python 列表中使用切片运算符避免 for 循环中的副作用?

c++ - 缩小复制/粘贴代码的更好方法