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")
在上述情况下,PARAM1
和 PARAM2
是 class 变量 。
我们必须做这样的事情:
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')
因为我正在使用 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")
在上述情况下,PARAM1
和 PARAM2
是 class 变量 。
我们必须做这样的事情:
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')