如何导入另一个外部python模块?

时间:2011-12-28 20:11:59

标签: python

这可能是一个愚蠢的问题,但不太确定还有什么可做的。

main.py

import module2
global x
hello="Hello"
x=module2.message()
x.say()

module2.py

class message:
    def say():
        print hello

当我打印hello时,我指的是main.py中的hello变量,但是这个方法会返回一个错误。有谁知道解决方案? (我宁愿不将hello变量传递给函数)

4 个答案:

答案 0 :(得分:3)

唯一可靠的解决方案称为封装

所以,基本上,您可以将代码更改为:

main.py

import module2

global x
hello="Hello"
x=module2.message(hello)
x.say()

module2.py

class message:
    def __init__(self, hello):
        self.hello = hello
    def say():
        print self.hello

另外尝试遵循Python的编码风格 - 您的生活和代码的未来开发人员将更容易。

答案 1 :(得分:2)

有多个选项,但请注意,一个模块无法直接访问调用模块。

  1. 只需将hello作为变量(def say(msg): print msg
  2. 传递
  3. main.py中的所有变量传递给module2def say(g): print g['hello']say(globals())
  4. 将其存放在某个地方,然后在需要时将其解压缩。

答案 2 :(得分:1)

由于main.py导入module2.py,您可以访问main中moule2中定义的全局变量。

在你的情况下,因为module2没有导入main,所以在module2中不访问main中的全局变量。

一种解决方案是由@Tadeck

定义的

答案 3 :(得分:1)

在这个特定的例子中,对于module2.py来说,导入main.py是完全可以的,虽然有一些问题。

最明显的是main.py可能正在从命令行运行,如python main.py,这会使该文件认为它被称为__main__。您可以在module2中导入该模块,但这有点不寻常;它被称为“main.py”,你想要import main。这样做会导致模块第​​二次导入

为了确保这一点,您必须安排导入文件以使其没有副作用,除非它被导入为 __main__。 python中一个非常常见的习惯用法是在模块末尾测试该条件。

import module2
global x
hello="Hello"

def main():
    x=module2.message()
    x.say()

if __name__ == '__main__':
    main()

现在,对于实际导入main的module2.py来说,这很好。另一方面,将变量从一个模块导入另一个模块很难预测何时导入可以递归,您可能还没有该变量,因为模块已经尝试导入 you 。另一方面,使用点分语法引用模块中的变量总是安全的。所以你的module2.py应该是:

import main
class message:
    def say():
        print main.hello

这也使hello来自哪里更加明显。