【发布时间】:2022-01-08 20:02:15
【问题描述】:
我正在寻找一种 Python 方式来表示常量容器。常量作为属性访问,以便 IDE 可以根据需要自动完成。 目前我使用具有类属性的简单类:
class CONFIG():
DIR = 'C:'
VERSION = '2.0'
# usage:
version = CONFIG.VERSION
类作为对象使用,从不实例化,常量是静态类属性。当然,他们可能会被搞砸,这是一个问题。
有没有更好的方法来做到这一点? NamedTuples 不具备动态添加新常量的灵活性和清晰度,除非我错过了什么。
背景: 我的工作流程是 jupyter notebook -> python script -> library module。 例如,在目标,命名空间由读取配置文件的模块或更高级的类提供。 在此之前,我寻找一种简单的方法来在同一个模块或笔记本中命名我的 constants。为清楚起见,我对不同类型的常量使用不同的命名空间,例如CONFIG 用于配置,PARAMS 用于数据模型的参数。
【问题讨论】:
-
为什么在所有值都是静态的时候还需要一个类
CPNFIG。你应该只是DIR = 'C:' -
我会说,纯粹出于命名空间的目的使用 Python 类会被某些人认为是一种反模式,包括我在内。如果您需要命名空间,请为常量使用单独的文件,但老实说......我可能会三思而后行。大多数时候,仅仅为常量引入一个单独的命名空间是没有意义的。
-
我同意@JanLikar 的观点,但也许如果您提供更多信息,我们将能够更好地帮助您,因为现在看来我们过于概括了您的问题。如果您有一堆变量最好将它们设置在一个模块中,但我会三思而后行。
-
您的 IDE 应该能够自动完成直接的常量定义
VERSION = "2.0",无论它们是在一个类中还是只是放在文件的顶部(它们通常所在的位置)。