Python 2.6中的可重用枚举

时间:2015-09-28 06:32:47

标签: python enums iterable

当我使用Python 2.6时,我正在尝试创建自定义Enum类。我需要的是用enum对象存储字符串。类似的东西:

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")

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

import Parameters

for param in Parameters:
    # do sth

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

3 个答案:

答案 0 :(得分:3)

使用反向移植的enum模块(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')

答案 1 :(得分:1)

for param in Parameters:
   #

上面不起作用,因为Parameters是类并且它不可迭代。

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

PARAM1PARAM2类变量

我们必须做这样的事情:

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'>

注意

Python 2.x

中使用raw_input()

Python 3.x

中使用input()

[编辑3] 实例变量方法的硬编码值。

hardcoded_values.py文件中定义类

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")

Hardcodes文件

中导入test.py课程
#- 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'))

答案 2 :(得分:0)