在Python中有没有更好的方法获取命名常量系列(枚举)?

21 投票
6 回答
5165 浏览
提问于 2025-04-11 09:25

我在寻找在Python中获取命名常量的方法。

class constant_list:
    (A_CONSTANT, B_CONSTANT, C_CONSTANT) = range(3)

然后你当然可以这样引用它:

constant_list.A_CONSTANT

我想你可以使用字典,用字符串作为键:

constant_dic = {
    "A_CONSTANT" : 1,
    "B_CONSTANT" : 2,
    "C_CONSTANT" : 3,}

然后这样引用它:

constant_dic["A_CONSTANT"]

我的问题很简单。有没有更好的方法来做到这一点?并不是说这些方法不好,只是好奇一下,还有没有我没想到的常见写法?

提前谢谢你。

6 个回答

2

我觉得这个枚举类的做法(活跃状态,Python Cookbook)非常有效。

而且它还有一个查找功能,这个功能很不错。

Pev

2

constant_dic的另一种构建方式:

constants = ["A_CONSTANT", "B_CONSTANT", "C_CONSTANT"]
constant_dic = dict([(c,i) for i, c in enumerate(constants)])
19

对于2.3版本或更高版本:

class Enumerate(object):
  def __init__(self, names):
    for number, name in enumerate(names.split()):
      setattr(self, name, number)

使用方法:

 codes = Enumerate('FOO BAR BAZ')

codes.BAZ 的值将是2,以此类推。

如果你只有2.2版本,请在前面加上:

 from __future__ import generators

 def enumerate(iterable):
   number = 0
   for name in iterable:
     yield number, name
     number += 1

(这段内容来自于 这里)

撰写回答