【问题标题】:What is a good way to maintain a set of constants in Python project?在 Python 项目中维护一组常量的好方法是什么?
【发布时间】:2020-05-29 07:34:16
【问题描述】:

有一个包含以下内容的 .py 文件吗?

class Set1(Enum):
   A = 1
   B = 2

class Set2(Enum):
  hi=1
  hello=2

或者干脆

Set1 = {"A":1,"B":2}
Set2 = {"C"="hi","D"="Hello"}

请注意,这些常量将被项目中的不同模块使用。

【问题讨论】:

标签: python dictionary enums standards


【解决方案1】:

通常,您可以像这样在文件中定义常量:

some_file.py

FOO = 0
BAR = "baz"

如果你需要使用它:

import some_file

print(some_file.FOO)
print(some_file.BAR)

【讨论】:

  • 所以只有当常量在顺序或序列方面相互关联时,使用枚举才有意义?
  • 当您需要枚举类型时,@ShubhamPandey 枚举很有意义。所以是的,它们是一组相关的对象,它们都是相同的类型。\
【解决方案2】:

如果您有一组相关的常量,例如regex flags,那么Enum 是合适的工具(例如Set2 中的hihello)。

对于不相关的常量,我将使用 aenum1 中的 Constant 类:

class MiscellaneousConstants(Constant):
    A = 1
    B = 2

Constants 与Enums 相似之处在于您无法重新绑定它们,并且它们具有很好的代表:

>>> MiscellaneousConstants.A
<MiscellaneousConstants.A: 1>

>>> MiscellaneousConstants.A = 9
Traceback (most recent call last):
  ...
AttributeError: cannot rebind constant <MiscellaneousConstants.A>

键入类名可能很麻烦,因此为了方便将Constant 成员放入全局名称空间,提供了export

from aenum import Constant, export

@export(globals())
class MiscellaneousConstants(Constant):
    A = 1
    B = 2

并在使用中:

>>> A
<MiscellaneousConstants.A: 1>

请注意,与 Python 一样,全局级别的名称仍然可以反弹:

>>> A = 9
>>> A
9

Constant 类成员仍然是常量:

>>> MiscellaneousConstants.A
<MiscellaneousConstants.A: 1>

>>> MiscellaneousConstants.A = 9
Traceback (most recent call last):
  ...
AttributeError: cannot rebind constant <MiscellaneousConstants.A>

1 披露:我是Python stdlib Enumenum34 backportAdvanced Enumeration (aenum) 库的作者。

【讨论】:

    猜你喜欢
    • 2017-04-01
    • 2011-12-05
    • 2021-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 2016-05-21
    相关资源
    最近更新 更多