这可能是一个愚蠢的问题,但不太确定还有什么可做的。
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变量传递给函数)
答案 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)
有多个选项,但请注意,一个模块无法直接访问调用模块。
hello
作为变量(def say(msg): print msg
)main.py
中的所有变量传递给module2
:def say(g): print g['hello']
和say(globals())
答案 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
来自哪里更加明显。