如何导入其他外部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 个回答
1
因为 main.py
引入了 module2.py
,所以你可以在 main 中访问 module2 里定义的全局变量。
在你的情况中,由于 module2 并没有引入 main,所以 module2 里无法访问 main 中的全局变量。
一个解决办法是由 @Tadeck 提出的。
2
有几种选择,但要注意,一个模块不能直接访问调用它的模块。
- 简单地把
hello
作为一个变量传递(比如def say(msg): print msg
) - 把
main.py
中的所有变量传递给module2
:可以用def say(g): print g['hello']
和say(globals())
这样的方式 - 把它存储在某个地方,然后在需要的时候提取出来。
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的编码风格,这样你自己和将来维护你代码的开发者都会轻松很多。