Python中枚举的常用做法是什么?

可能重复:
我如何在Python中表示'枚举'?

Python中枚举的常用做法是什么? 即他们如何在Python中复制?

public enum Materials
{
    Shaded,
    Shiny,
    Transparent,
    Matte
}

class Materials:
    Shaded, Shiny, Transparent, Matte = range(4)

>>> print Materials.Matte
3

我已经多次看到这种模式:

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

如果您正在寻找更强大的功能(稀疏值,特定于枚举的异常等),请尝试使用此配方。


我不知道为什么Enums不是由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
链接地址: http://www.djcxy.com/p/91729.html

上一篇: What's the common practice for enums in Python?

下一篇: Stanford Parser and NLTK