首页 > 解决方案 > 不同模块中的继承

问题描述

我有一个父类和一个子类,每个类都在自己的单独文件中。如果这两个类在一个文件中,我的 MWE 可以工作。如果我将它们分别拆分为单独的文件,我不知道如何相互导入。这是MWE:

cat test.py
#!/usr/bin/env python3

from main_win import MainWin

test = MainWin()
test.click()

cat main_win.py
#!/usr/bin/env python3

from sub_win import SubWin

class MainWin:
    def __init__(self):
        print('Created main window')
    def click(self):
        options = SubWin()

cat sub_win.py
#!/usr/bin/env python3

from main_win import MainWin

class SubWin(MainWin):
    def __init__(self):
        print('Created sub window')

如果我执行test.py并使用上面定义的循环导入,我会收到以下错误:

ImportError:无法从“main_win”(/home/basil/scratch/trash/pythonInheritance/p03/main_win.py)导入名称“MainWin”

编辑:有有效的评论质疑我的类结构:我需要继承吗?我可以添加一个超类,上面的两个类都可以继承吗?这些都是非常好的评论,我会仔细考虑。当然,在回答这些问题时,MWE 对您没有用处。现在,让我们假设类结构不会改变。那么如何解决这个问题呢?通过将两个模块合并为一个,还是有其他方法?

标签: pythonpython-3.xinheritancepython-import

解决方案


您有一个循环导入。main_win.py进口... sub_win.py_main_win.py

要解决此问题并使代码保持原样,您可以从技术上from sub_win import SubWin移至MainWin.click(). 不过,这绝对不是我的建议,您可能应该重新设计并重新考虑这种方法来实现您想要实现的任何目标。


推荐阅读