首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Python中,枚举的常见做法是什么?

在Python中,枚举的常见做法是什么?
EN

Stack Overflow用户
提问于 2009-03-31 20:14:18
回答 4查看 133.6K关注 0票数 152

可能重复:

How can I represent an 'enum' in Python?

在Python中,枚举的常见做法是什么?也就是说,它们是如何在Python中复制的?

代码语言:javascript
复制
public enum Materials
{
    Shaded,
    Shiny,
    Transparent,
    Matte
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-03-31 20:30:32

代码语言:javascript
复制
class Materials:
    Shaded, Shiny, Transparent, Matte = range(4)

>>> print Materials.Matte
3
票数 374
EN

Stack Overflow用户

发布于 2009-03-31 20:21:52

这种模式我已经看过好几次了:

代码语言:javascript
复制
>>> 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

您也可以只使用类成员,尽管您必须提供自己的编号:

代码语言:javascript
复制
>>> class Foo(object):
        bar  = 0
        baz  = 1
        quux = 2

>>> Foo.quux
2

如果你正在寻找更健壮的东西(稀疏值,特定于枚举的异常,等等),try this recipe

票数 20
EN

Stack Overflow用户

发布于 2009-03-31 20:29:03

我不知道为什么Python本身不支持枚举。我发现模拟它们的最好方法是覆盖_ str _和_ eq _,这样你就可以对它们进行比较,当你使用print()时,你得到的是字符串而不是数值。

代码语言:javascript
复制
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

用法:

代码语言:javascript
复制
>>> s = enumSeason(enumSeason.Spring)

>>> print(s)

Spring
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/702834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档