【问题标题】:python import variables蟒蛇导入变量
【发布时间】:2012-10-06 18:52:08
【问题描述】:

有 2 个文件:

首先调用:main.py

import side

var = 1

side.todo()

第二个调用:side.py

import main


def todo():
    print "printing variable from MAIN: %s" %(main.var)

运行 main.py 时出现错误:

AttributeError: 'module' object has no attribute 'todo'

在python中,你不能以这种方式借用和使用变量吗?

我已尝试搜索与此相关的文档,但找不到与此问题相关的任何内容。

当然,还有其他方法可以做到这一点?

【问题讨论】:

  • 你有循环导入。解释见这里:Python: Circular (or cyclic) imports
  • 是的,我现在明白模块之间的循环是不允许的。那么有没有办法克服这个问题呢?除了将所有内容放在一个源文件下。
  • @mrdigital:比这更微妙。允许模块之间的循环导入,但在执行此操作时必须小心。在您的情况下,您需要将 side.py 中的每个实例 main 替换为 __main__
  • @icktoofay:太棒了,它有效!当然,这是有道理的

标签: python variables import


【解决方案1】:

问题是不是“你不能有循环导入”,而是在定义之前你不能使用一个名字。将调用移至 side.todo() 脚本运行后不会立即发生的地方,或将 main.var 移至第三个模块。

【讨论】:

    【解决方案2】:

    一个快速而丑陋的解决方案是将 import 语句移动到在 side.py 中需要它之前不会执行的位置

    def todo():
        import main
        print "printing variable from MAIN: %s" %(main.var)
    

    我建议不要这样做。该示例是人为设计的,但我相信您可以为您的具体情况找到更好的解决方案。

    【讨论】:

    • 我之前曾尝试过类似的问题,但没有成功。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多