python - 不同模块中的继承
问题描述
我有一个父类和一个子类,每个类都在自己的单独文件中。如果这两个类在一个文件中,我的 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 对您没有用处。现在,让我们假设类结构不会改变。那么如何解决这个问题呢?通过将两个模块合并为一个,还是有其他方法?
解决方案
您有一个循环导入。main_win.py
进口... sub_win.py
_main_win.py
要解决此问题并使代码保持原样,您可以从技术上from sub_win import SubWin
移至MainWin.click()
. 不过,这绝对不是我的建议,您可能应该重新设计并重新考虑这种方法来实现您想要实现的任何目标。
推荐阅读
- streamreader - C# FileSystemWatcher & StreamReader 给出“文件正在被另一个进程使用”错误
- azure - Terraform 数据块实验室提供商
- node.js - 为什么我得到 Req.Req (嵌套请求)这个配置在 express 中?
- javascript - React:将数据转换为高级形式(或如何在 react chartjs 2 的图表中处理我的数据)
- oracle-apex - 如何从 SQL Developer 中清除 Apex Oracle 调试历史记录?
- firebase-realtime-database - Firebase 实时数据库规则来过滤列表
- php - php redis会话保存处理程序扩展函数gc(垃圾收集)
- ios - 运行 react-native run ios 时如何配置运行哪个 xcodebuild 工具版本?
- python - 不能腌制 _thread.RLock 对象 - 我看不到问题
- reactjs - React Material UI手风琴:手风琴打开时如何调用函数?