可能重复:
How can I represent an 'enum' in Python?
在Python中,枚举的常见做法是什么?也就是说,它们是如何在Python中复制的?
public enum Materials
{
Shaded,
Shiny,
Transparent,
Matte
}
发布于 2009-03-31 20:30:32
class Materials:
Shaded, Shiny, Transparent, Matte = range(4)
>>> print Materials.Matte
3
发布于 2009-03-31 20:21:52
这种模式我已经看过好几次了:
>>> class Enumeration(object):
def __init__(self, names): # or *names, with no .split()
for number, name in enumerate(names.split()):
setattr(self, name, number)
>>> foo = Enumeration("bar baz quux")
>>> foo.quux
2
您也可以只使用类成员,尽管您必须提供自己的编号:
>>> class Foo(object):
bar = 0
baz = 1
quux = 2
>>> Foo.quux
2
如果你正在寻找更健壮的东西(稀疏值,特定于枚举的异常,等等),try this recipe。
发布于 2009-03-31 20:29:03
我不知道为什么Python本身不支持枚举。我发现模拟它们的最好方法是覆盖_ str _和_ eq _,这样你就可以对它们进行比较,当你使用print()时,你得到的是字符串而不是数值。
class enumSeason():
Spring = 0
Summer = 1
Fall = 2
Winter = 3
def __init__(self, Type):
self.value = Type
def __str__(self):
if self.value == enumSeason.Spring:
return 'Spring'
if self.value == enumSeason.Summer:
return 'Summer'
if self.value == enumSeason.Fall:
return 'Fall'
if self.value == enumSeason.Winter:
return 'Winter'
def __eq__(self,y):
return self.value==y.value
用法:
>>> s = enumSeason(enumSeason.Spring)
>>> print(s)
Spring
https://stackoverflow.com/questions/702834
复制相似问题