【发布时间】:2023-03-31 18:39:01
【问题描述】:
我有一个文件constants.py,其中包含一堆全局常量。有没有一种方法可以将它们全部作为 dict 获取,仅用于这个文件?
【问题讨论】:
我有一个文件constants.py,其中包含一堆全局常量。有没有一种方法可以将它们全部作为 dict 获取,仅用于这个文件?
【问题讨论】:
应该很简单:
import constants
print(constants.__dict__)
【讨论】:
import constants
constants_dict = {}
for constant in dir(constants):
constants_dict[constant] = getattr(constants, constant)
我不确定我是否明白这一点。写constants_dict['MY_CONSTANT'] 比constants.MY_CONSTANT 更好/更容易/更易读?
编辑:
基于 cmets,我现在看到了一些潜在用途。
这是上面的另一种写法,取决于你想要的紧凑程度。
constants_dict = dict((c, getattr(constants, c)) for c in dir(constants))
EDIT2:
cji 赢了! constants.__dict__
【讨论】:
getattr 和 setattr 函数。
constants_dict 部分将消失,我可以直接使用我的常量。
__dict__ 属性以避免写 object.something (而不仅仅是 @ 987654332@) 在 Django 模板中 - 它并不优雅,但它可以工作。在我的情况下,我用一些对象实例的__dict__ 更新了context - 但它也适用于模块。但是,如果您定义了 __slots__ 的类,并且可能在您尝试查询某个包时(__init__.py 没有 __all__),它将失败。