Python中的常量:放在模块根部还是模块内的命名空间中?
我正在创建一个包含大约一百个常量的Python模块。
我想避免在别人导入我的模块时出现命名冲突,所以我在想有什么好的方法来解决这个问题。
MY_CONSTANT = 1
MY_SECOND_CONSTANT = 2
...
MY2_CONSTANT = "a"
MY2_SECOND_CONSTANT = "b"
...
或者
class My:
CONSTANT = 1
SECOND_CONSTANT = 2
...
class My2
CONSTANT = "a"
SECOND_CONSTANT = "b"
...
或者你们还有其他的建议吗?
我之前是用Java的,当然更喜欢第二种方式,但有些人可能觉得这样做有点过了……
4 个回答
21
常量
常量通常是在模块级别定义的,名字全部用大写字母,并且用下划线来分隔单词。比如说,
MAX_OVERFLOW
和TOTAL
就是常量的例子。
37
每个模块都有自己的命名空间,所以不需要再创建一个新的命名空间。
比如有一个模块叫 foo.py
:
FOO = 1
BAR = 2
SHMOO = 3
你可以这样使用它:
import foo
foo.BAR
46
这要看情况。一般来说,常量是在模块级别定义的。但是如果你有很多关于 category_a
和 category_b
的常量,可能可以考虑创建一个叫 constants
的子包,里面有 constants.category_a
和 constants.category_b
这样的模块。
我建议不要使用 class
,因为它可以被实例化,这样就没什么意义了。而且它相比于模块没有什么优势,除了可以把多个类放在一个物理文件里(但如果常量很多的话,这样做可能不太好)。在Java中可能会用静态类,但在Python中,模块就是最合适的选择。
在Python中,名字冲突不是个大问题,除非你使用 import *
(不过你本来就不应该这么做:根据文档的说法)。只要模块内部没有名字冲突,你可以放心,用户不会把你模块里的所有名字都拉到自己的模块里,也不会用一个和其他模块冲突的名字来导入你的模块。