当我使用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
。
答案 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")
在上述情况下, PARAM1
和PARAM2
是类变量。
我们必须做这样的事情:
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)
查看myo.utils.enum.Enumeration
课程:https://github.com/NiklasRosenstein/myo-python/blob/9335663d00df762b29e0c0f12550d8d73aa097b6/myo/utils/enum.py