是的,您绝对应该考虑到这一点。您尝试的是模块之间的循环导入,这可能会带来很大的问题。如果combat
importsmain
和main
imports combat
,那么你可能会得到一个异常,因为在开始执行导入main
时还没有完成执行。combat
假设main
是您的启动脚本,它可能只是实例化一个类或从另一个模块调用一个方法。也避免使用全局变量。即使现在看起来它们不会成为问题,但以后可能会在后面咬你。
也就是说,您可以像这样引用模块的成员:
import common
x = common.some_method_in_common()
y = common.SomeClass()
或者
from common import SomeClass
y = SomeClass()
就个人而言,我通常避免在没有使用模块名称限定的情况下引用来自另一个模块的方法,但这也是合法的:
from common import some_method_in_common
x = some_method_in_common()
我通常from ... import ...
用于类,我通常将第一种形式用于方法。(是的,这有时意味着除了导入模块本身之外,我还从模块导入了特定的类。)但这只是我个人的约定。
强烈建议不要使用另一种语法是
from common import *
y = SomeClass()
这会将 common 的每个成员导入当前范围,但不以下划线 ( _
) 开头。我不鼓励它的原因是因为它使理解名称的来源并且使破坏事情变得太容易了。考虑这对导入:
from common import *
from some_other_module import *
y = SomeClass()
来自哪个模块SomeClass
?除了去看看这两个模块之外,没有别的办法。更糟糕的是,如果两个模块都定义SomeClass
或SomeClass
稍后添加到some_other_module
?