【问题标题】:What's the best way to initialise and use constants across Python classes?在 Python 类中初始化和使用常量的最佳方法是什么?
【发布时间】:2011-06-14 15:13:00
【问题描述】:

以下是我如何声明常量并在不同的 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 多个常量。

【问题讨论】:

  • 首先python中没有常量变量,其次你的全局变量是在多个模块中使用还是只在一个模块中使用?
  • 它们在该项目中的不同类中使用。

标签: python


【解决方案1】:

为什么不直接使用

import constants

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

来自python zen:

命名空间很好。让我们做更多这样的事情!

编辑:除了,当你引用时,你应该包括一个参考并检查它,因为正如其他人指出的那样,它应该是:

命名空间是一个很棒的主意——让我们做更多这样的事!

这一次,我其实是从源头复制过来的:PEP 20 -- The Zen of Python

【讨论】:

  • ... 这也是一种更恰当的表达方式。
  • @Daniel Roseman:哎哟。我站得更正了。我会相应地编辑我的帖子!
  • 另一个减少打字的方法是使用“import constants as CN”和“print(CN.GOOD)”等。
  • 有一瞬间我想,constants 是一个真正的 python 库,它会多么好,大声笑。我没有阅读问题。 :-)
  • 什么是 Constance 和关键静态关键数据,我想读取它的演示 ini 文件并在使用它之前将其分配给变量,我尝试编写方法但无法在定义中调用也尝试过使用 init 方法但失败。反正我是 python 新手。
【解决方案2】:

如果常量绑定到特定类并在该类中私下使用,则您还可以选择使它们特定于该类:

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

   def __init__(self...

你走了。

【讨论】:

    【解决方案3】:

    你有几个选择:

    1. 使用常量文件按照您现在的方式进行操作
    2. 使用平面文件并解析一次,传递字典/类
    3. 查询到数据库

    从开销的角度来看,1 和 2 大致相同。至于您关于导入特定常量的问题,使用以下约定之一更容易:

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

    【讨论】:

      【解决方案4】:

      尝试查看以下链接(一个链接包含来自活动状态的关于如何实现实常数的收据):

      Importing a long list of constants to a Python file

      Create constants using a "settings" module?

      Can I prevent modifying an object in Python?

      【讨论】:

        猜你喜欢
        • 2017-11-01
        • 1970-01-01
        • 2010-10-13
        • 2010-09-17
        • 2016-02-09
        • 1970-01-01
        • 1970-01-01
        • 2012-02-08
        • 2012-01-28
        相关资源
        最近更新 更多