如何在python中定义相关的consts?

时间:2013-03-24 10:57:02

标签: python

这样定义相关的consts是pythonic吗?

定义:

class LinkChoices(object):
    FOLLOW, FRIENDSHIP, CLOSE_FRIENDSHIP, = 10, 20, 30,

使用:

from  some_module import LinkChoices

link.status = LinkChoices.FOLLOW

是否有任何定义这样的竞争的缺点?

2 个答案:

答案 0 :(得分:1)

是的,我认为它非常Pythonic,除了我不会使用ALL_CAPS作为类名。

我也没有在尾随逗号中看到这一点。

最后,我个人可能会在每行定义一个常量而不是将它们放在同一行上。

有关进一步的讨论,请参阅How to create a constant in Python

答案 1 :(得分:1)

正如链接线程中所建议的那样,您也可以采取防御措施并采取措施防止意外重新定义常量,例如:

def const(cls):
    class _const(type):
        def __setattr__(self,name,value):
            raise ValueError("Can't rebind const(%s)" % name)
    class _(cls):
        __metaclass__ = _const
    return _

@const
class LinkChoices(object):
    FOLLOW, FRIENDSHIP, CLOSE_FRIENDSHIP, = 10, 20, 30,

LinkChoices.FOLLOW = 123 # raises ValueError

不知道这是不是“pythonic”。我不愿意。