我有一个名为main.py的文件和一个名为classes.py
的文件main.py包含应用程序以及当class.py包含一些类时发生的事情。
main.py包含以下代码
main.py
import classes
def addItem(text):
print text
myClass = classes.ExampleClass()
然后我们有classes.py
classes.py
class ExampleClass (object):
def __init__(self):
addItem('bob')
令人惊讶的是,这不是我使用的实际代码,因为我已经删除了任何妨碍你看到我想要做的事情。我希望能够从classes.py中的类调用main.py中定义的方法。我该怎么做?
提前致谢
答案 0 :(得分:9)
我无法比this post by Alex Martelli更好地回答这个问题。基本上你尝试这样做的任何方式都会导致麻烦,你最好重构代码以避免两个模块之间的相互依赖......
如果你有两个相互依赖的模块A和B,最简单的方法是将它们所依赖的部分代码隔离到第三个模块C中,并让它们都导入C。
答案 1 :(得分:3)
重构的建议很好。如果你必须按原样保留文件,那么你可以编辑main.py以确保只需导入文件就可以执行任何操作,然后在需要它的函数中导入main:
class ExampleClass (object):
def __init__(self):
import main
main.addItem('bob')
这可以避免循环导入,但不像第一次重构那么好......
答案 2 :(得分:1)
我建议将常用函数放在classes.py中,或者可能在第三个模块中更好,也许是utils.py。
答案 3 :(得分:1)
所有可执行代码都应在if __name__ == "__main__"
内。这将阻止在作为模块导入时执行它。在main.py
if __name__=="__main__":
myClass = classes.ExampleClass()
然而,正如dF所说,在这个阶段重构可能比尝试解决循环依赖更好。