在Python类中初始化和使用常量的最佳方法是什么?

75 投票
5 回答
79305 浏览
提问于 2025-04-16 19:32

这是我在不同的Python类中声明常量并使用它们的方法:

# project/constants.py
GOOD = 1
BAD = 2
AWFUL = 3

# project/question.py
from constants import AWFUL, BAD, GOOD

class Question:
    def __init__(self):
        ...

这样存储和使用常量值好吗?我意识到,过一段时间后,常量文件可能会变得很大,而在任何一个文件中,我可能需要明确导入10个以上的常量。

5 个回答

4

你有几个选择:

  1. 继续用你现在的方式,也就是用一个常量文件。
  2. 使用一个简单的文件,解析一次,然后把一个字典或类传来传去。
  3. 从数据库中查询。

从开销的角度来看,选项1和选项2差不多。至于你问的关于如何导入特定常量的问题,使用以下其中一种方式会简单得多:

  • import constants; some_func(constants.AWFUL)
  • from constants import *; some_func(AWFUL)
17

如果这些常量是和某个特定的类相关联,并且只在这个类内部使用,你还可以选择把它们专门定义为这个类的常量:

class Foo(object):
   GOOD = 0
   BAD = 1
   WTF = -1

   def __init__(self...

这样就可以使用了。

90

为什么不直接使用

import constants

def use_my_constants():
    print constants.GOOD, constants.BAD, constants.AWFUL

来自Python的哲学:

命名空间是好的。让我们多用一些!

编辑:不过,当你引用的时候,应该加上出处并核对一下,因为正如其他人所指出的,应该是:

命名空间真是个好主意——让我们多用一些!

这次,我确实是从源头复制的: PEP 20 -- Python的哲学

撰写回答