我该如何在Python中最好地模拟和/或避免枚举?

5 投票
6 回答
5019 浏览
提问于 2025-04-11 09:18

我在一些Python项目中使用了一个小类来模拟枚举(Enums)。这样做有没有更好的方法,或者在某些情况下这样做是否最合适呢?

类的代码在这里:

class Enum(object):
'''Simple Enum Class
Example Usage:
>>> codes = Enum('FOO BAR BAZ') # codes.BAZ will be 2 and so on ...'''
def __init__(self, names):
    for number, name in enumerate(names.split()):
        setattr(self, name, number)

6 个回答

4

最常见的枚举(enum)情况是列举一些值,这些值通常是状态模式或策略模式的一部分。枚举代表特定的状态或特定的可选策略。在这种情况下,它们几乎总是和某个类的定义紧密相关。

class DoTheNeedful( object ):
    ONE_CHOICE = 1
    ANOTHER_CHOICE = 2 
    YET_ANOTHER = 99
    def __init__( self, aSelection ):
        assert aSelection in ( self.ONE_CHOICE, self.ANOTHER_CHOICE, self.YET_ANOTHER )
        self.selection= aSelection

然后,在这个类的使用者中。

dtn = DoTheNeeful( DoTheNeeful.ONE_CHOICE )
5

之前有提议在语言中加入枚举(Enums),但被拒绝了(可以查看这个链接了解更多:http://www.python.org/dev/peps/pep-0354/)。不过,你可以使用一些现成的包,而不必自己去实现:

3

这里有很多关于这个话题的精彩讨论,你可以点击这里查看

撰写回答