如何导入其他外部Python模块?

2 投票
4 回答
3566 浏览
提问于 2025-04-17 09:10

这可能是个傻问题,但我不太确定该怎么办。

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 个回答

1

因为 main.py 引入了 module2.py,所以你可以在 main 中访问 module2 里定义的全局变量。

在你的情况中,由于 module2 并没有引入 main,所以 module2 里无法访问 main 中的全局变量。

一个解决办法是由 @Tadeck 提出的。

2

有几种选择,但要注意,一个模块不能直接访问调用它的模块。

  1. 简单地把 hello 作为一个变量传递(比如 def say(msg): print msg
  2. main.py 中的所有变量传递给 module2:可以用 def say(g): print g['hello']say(globals()) 这样的方式
  3. 把它存储在某个地方,然后在需要的时候提取出来。
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的编码风格,这样你自己和将来维护你代码的开发者都会轻松很多。

撰写回答