这肯定是一个非常愚蠢的问题(也许有点基于意见),但是我如何创建一个类似枚举的对象来存储错误代码之类的东西,这些代码是常量并且稍后可以在代码中访问?
我觉得有四种选择:
1)一个状态代码 - 一个变量
STATUS_NEW = 0
STATUS_PENDING = 1
STATUS_DONE = 2
STATUS_ERROR = -1
if some_object.status == STATUS_NEW:
print 'this object is pretty fresh!'
这对我来说并不好看。
2)包含所有状态代码的字典,其名称为密钥:
STATUS = {'new': 0, 'pending': 1, 'done': 2, 'error': -1}
if some_object.status == STATUS['new']:
print 'you got the idea.'
这看起来更丑陋,但仍然有一个对象比几个对象更好。
3)named tuple看起来更好,但在初始化时我看起来更糟糕了:
STATUS = namedtuple('Status', ['error', 'new', 'pending', 'done'])
STATUS = STATUS(error=-1, new=0, pending=1, done=2)
if some_object.status == STATUS.new:
print 'looks prettier than using dict!'
4)使用课程:
class Status:
NEW = 0
PENDING = 1
DONE = 2
ERROR = -1
if some_object.status == Status.NEW:
pass
我错过了什么吗?什么是更多的鼓励?
提前致谢!
答案 0 :(得分:12)
python中的枚举就是为此而设计的。
from enum import Enum
class STATUS(Enum):
NEW = 0
PENDING = 1
DONE = 2
ERROR = -1
枚举从3.4开始提供。如果你不是那么幸运,pypi可以提供后退。
答案 1 :(得分:1)
对于python< 3.4我个人更喜欢第四个,但是......
if some_object.status == Status.NEW:
pass
不要那样做。您可能希望返回外部工具的错误代码,但在所有Python环境中,您应该使用异常。不同的错误代码只是引发了不同的异常。