Python 2.6 中的可迭代枚举

Iterable enum in Python 2.6

因为我正在使用 Python 2.6,所以我正在尝试创建自定义枚举 class。我需要的是用枚举对象存储字符串。类似于:

class Enum(object):
    def __init__(self, value):
        self.value = value[0]
        self.msg = value[1]

class Parameters(Enum):
    SERVER_LISTEN_ADDRESS = (0, "http://blabla.com")
    SERVER_LISTEN_PORT = (1, "7001")
    SERVER_SSL_LISTEN_PORT = (2, "7002")
    (...) # many parameters more 
    SERVER_NAME = (X, "name")

问题是我的 'Parameters' class 不可迭代... 从另一个文件我需要能够在 PARAM 之间迭代:

import Parameters

for param in Parameters:
    # do sth

不幸的是,对于我的解决方案我有错误:for param in Parameters: TypeError: 'type' object is not iterable

for param in Parameters:
   #

以上将不起作用,因为 Parameters 是 class 并且它不可迭代。

class Parameters(Enum):
    PARAM1 = (0, "some msg 1")
    PARAM2 = (1, "some msg 2")
在上述情况下,

PARAM1PARAM2class 变量


我们必须做这样的事情:

class Enum(object):
    def __init__(self, value):
        self.value = value[0]
        self.msg = value[1]

class Parameters(Enum):
    def _init__(self, value):
        super.__init__(value)

PARAM1 = (0, "some msg 1")
PARAM2 = (1, "some msg 2")
for param in [PARAM1, PARAM2]:
    print Parameters(param)

[编辑 1]:

通过带范围函数的for循环创建对象数量

代码:

for i in range(100):
    param = (i, "some mesg %s"%i)
    print Parameters(param)

[编辑 2]:

通过raw_input函数从用户获取值并将类型从字符串转换为整数

演示

>>> no = raw_input("Enter Number of objects you want to create(Give only number): ")
Enter Number of objects you want to create(Give only number): 33
>>> no
'33'
>>> type(no)
<type 'str'>
>>> no_int = int(no)
>>> type(no_int)
<type 'int'>

:

Python2.x

中使用raw_input()

Python中使用input()3.x

[编辑 3]:通过 实例变量方法 .

对值进行硬编码

hardcoded_values.py 文件中定义 class

class Hardcodes():
    def __init__(self,):
        self.para1 = (1, "some msg 1")
        self.para2 = (2, "some msg 2")
        self.para3 = (3, "some msg 3")
        self.para4 = (4, "some msg 4")

test.py 文件中导入 Hardcodes class

#- Create Object(instance) 
from hardcoded_values import Hardcodes
obj = Hardcodes()
hardcode_values = obj.__dict__
for i in hardcode_values.iteritems():
    print i

输出:

$ python test.py 

('para3', (3, 'some msg 3'))
('para2', (2, 'some msg 2'))
('para1', (1, 'some msg 1'))
('para4', (4, 'some msg 4'))

查看 myo.utils.enum.Enumeration class:https://github.com/NiklasRosenstein/myo-python/blob/9335663d00df762b29e0c0f12550d8d73aa097b6/myo/utils/enum.py

使用向后移植的 enum module (documentation):

from enum import Enum


class Parameters(Enum):
    PARAM1 = (0, "some msg 1")
    PARAM2 = (1, "some msg 2")

for i in Parameters:
    print(i, '=', i.value)

打印:

Parameters.PARAM1 = (0, 'some msg 1')

Parameters.PARAM2 = (1, 'some msg 2')