我该如何在Python中最好地模拟和/或避免枚举?
我在一些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/)。不过,你可以使用一些现成的包,而不必自己去实现:
- enum包:http://pypi.python.org/pypi/enum
- SymbolType(虽然和枚举不完全一样,但也很有用):http://pypi.python.org/pypi/SymbolType
- 或者你可以直接搜索一下
3
这里有很多关于这个话题的精彩讨论,你可以点击这里查看。