【问题标题】:How to declare variables to be used in multiple modules in python如何在python中声明要在多个模块中使用的变量
【发布时间】:2016-07-21 17:55:45
【问题描述】:

这个问题以前可能有人问过,但是我在 Stack Overflow 上找到的其他帖子主要涉及更改全局变量和导入函数等。也许我在快速搜索时措辞不对。

我开始用 Python 编写代码,我想知道以下最有效和正确的方法是什么。

我有一个要导入到其他模块的父模块。它具有以下结构:

# some import statements go here

# Constants that need to be the same for all objects
a = 1
b = 2
...

# A class with some useful functions
class Def():
    def __init__(self):
    ...

我在其他一些模块中导入这个模块,以使用 Def 类中的函数。但我也希望所有导入它的模块都可以访问我在类外声明的常量。

我在外面声明了它们,因为我希望这些值在我在该模块中调用它们的任何地方都可以使用。我不想将它们附加到对象(并且必须将它们称为 self.a、self.b 等),它们将在我使用的每个模块中都是常量。

我正在考虑的一些选项是:

  1. 在单独的类中将它们声明为全局变量,然后导入 每个模块中的那个类
  2. 使用from parentmodule import *

我不确定其中任何一个是否会起作用,以及是否有标准的方法来做到这一点。由于常量的性质,在执行后者时变量名称的冲突不会成为问题。在我的程序上下文中,它们是具有唯一名称的物理常数,不会用于表示其他变量。

如果问题太基本/以前问过,我们深表歉意,感谢您的帮助。

【问题讨论】:

    标签: python class import global-variables constants


    【解决方案1】:

    导入整个模块将充当一种命名空间,在我看来这是最简单的方法。所以你有“mystuff.py”:

    a = 1
    b = 2
    
    def MyFunc():
        ....
    

    然后在你的其他模块中:

    import mystuff
    
    print mystuff.a
    print mystuff.b
    
    mystuff.MyFunc()
    

    您的解决方案:

    from mystuff import *
    

    有效,但可能会发生冲突,我认为这不是人们认为的“pythonic”。

    【讨论】:

    • 有没有办法说变量在所有模块中都是通用的,这样我就不必一直输入 mystuff.a、mystuff.b 等?
    • 您可以将 mystuff.a 导入为 a,然后您可以将变量称为 a,只要您没有太多变量,这将起作用,因为每个变量都需要一行代码变量。
    • 或者只是from mystuff import a
    • @GoK,老实说,如果您希望代码清晰,最好将导入用作命名空间。如果您不想这样做,那么可以,使用“from mystuff import *”构造。有用;这样做并没有错,这只是我的经验,它会导致其他模块中的名称冲突,使得调试和维护变得非常困难——但这并不是“错误的”。但是,是的,每个模块都需要这条线。
    • 感谢所有提示!我将导入每个变量,我需要的不会太多。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    • 2015-03-31
    • 1970-01-01
    相关资源
    最近更新 更多