Skip to main content
 首页 » 编程设计

python之存储和使用自己的状态代码的大多数 pythonic 方式

2025年05月04日15jyk

这当然是一个非常愚蠢的问题(也许有点基于意见),但是我如何创建一个类似枚举的对象来存储诸如错误代码之类的东西,这些东西是常量并且稍后可以在代码中访问?

我想到有四种选择:

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 

我错过了什么吗?什么更值得鼓励?

提前致谢!

请您参考如下方法:

python 中的枚举正是为此而设计的。

from enum import Enum 
 
class STATUS(Enum): 
    NEW = 0 
    PENDING = 1 
    DONE = 2 
    ERROR = -1 

枚举从 3.4 开始可用。如果你不是那么幸运,pypi 有一个可用的反向端口。