【问题标题】:Python Module Level ConstantsPython 模块级常量
【发布时间】:2012-11-30 20:47:45
【问题描述】:

我正在创建我的第一个相当复杂的模块,并且像 wx 模块一样,我希望提供各种常量来简化程序员设置样式的任务。

假设如下目录结构:

Module
   +-__init__py
   +- Frame.py

以及init.py

的内容
__ALL__=["Frame.py"]
FRAME_DEFAULT_SIZE = (640, 480)
FRAME_DEFAULT_TITLE = "Some Simple Title"

然后在 Frame.py 中

class Frame(object)
    """Some docstrings go here
    """
    def __init__(self, parent, ID=-1,title=HOW DO I REFERENCE MY CONSTANT,
                 size = HOW DO I REFERENCE THIS CONSTANT):
        etc ...

如果我要导入我的模块以在一段程序代码中使用,常量将分别作为 Module.FRAME_DEFAULT_SIZE 和 Module.FRAME_DEFAULT_TITLE 使用。

但是当它们被定义在一个单独的文件中时,我如何将它们作为应该在模块名称空间中的类定义的一部分来引用?

我意识到常量(如果命名得当并且使用得当)应该只适用于父类及其子类,所以我可以在 Frame.py 文件中实例化它们。但是如何做到这一点呢?

任何帮助在这里表示赞赏。

【问题讨论】:

  • 为什么__init__.py中有常量?把它们放在Frame.py
  • 哈哈。我计划这样做,但我也想知道如何做到这一点。

标签: python module python-2.7 package


【解决方案1】:

导入Module 并从中访问它。这部分不会因为您在子模块中而改变。

【讨论】:

  • 所以如果我理解正确的话。代码(正如我在示例中设置的那样)创建了一个命名空间“模块”,其中除了一些常量之外什么都没有。为了在 Module.Frame 中使用这些常量,我实际上需要将 Module 导入 Frame。由于循环依赖问题,显然不是一个好主意,但我理解正确吗?
  • Python 在循环依赖方面没有任何问题。它不能做的是使用一个尚不存在的名称。只要您不尝试在Module 中的常量存在之前实例化Module.Frame,您就不会有问题。
猜你喜欢
  • 2020-03-19
  • 1970-01-01
  • 2015-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-20
  • 2013-12-12
  • 2012-11-04
相关资源
最近更新 更多