从python中的父文件调用

时间:2008-12-31 19:15:00

标签: python

我有一个名为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中定义的方法。我该怎么做?

提前致谢

4 个答案:

答案 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所说,在这个阶段重构可能比尝试解决循环依赖更好。