因此,我有两个不同的文件,如下所示:
file1.py
from file2 import * foo = "bar"; test = SomeClass();
file2.py
class SomeClass : def __init__ (self): global foo; print foo;
但是我似乎无法让file2识别来自file1的变量,即使它已经导入到file1中也是如此。如果可以某种方式实现,那将非常有帮助。
导入file2在file1.py使得全球(即,模块级)的约束名字file2提供给下面的代码file1-唯一的此类名称是SomeClass。它并 没有 做反向:在定义的名称file1并不提供给代码file2的时候file1进口file2。即使您以正确的方式(import file2如@nate正确建议)导入的情况也是如此,而不是以令人恐惧的可怕方式进行操作(如果在阳光下的每个人都忘记了结构的存在from ... import *,生命将会是 所以 更好的为大家)。
file2
file1
SomeClass
import file2
from ... import *
显然,你想在定义的全局名称file1提供给代码file2 和 反之亦然。这被称为“循环依赖”,这是一个 糟糕的 主意(在Python或其他任何地方)。
因此,与其向您展示在Python中实现周期性依赖(有些类似)的令人难以置信的脆弱,通常难以维护的黑客,我不如讨论 可以避免 这种可怕结构的许多出色方法。
例如,您可以将需要两个模块都可用的全局名称放在 第三个 模块中(例如file3.py,继续命名;;),然后将该第三个模块导入到其他两个模块中的每个模块中(import file3在file1和中file2,然后使用)file3.foo(例如, 合格 名称),目的是访问或设置来自其他模块之一或两者的全局名称, 而不是 裸名)。
file3.py
import file3
file3.foo
当然,如果您(通过编辑Q)明确 说明了为什么 您认为需要周期性依赖(只是一个简单的预测:不管是什么使您认为您需要周期性依赖,那么您都会得到越来越多的具体帮助)。错误;-)。