擅长:python、mysql、java
<p>你的问题是,你有一个循环进口情况。<code>main_win</code>模块导入<code>sub_win</code>,并且<code>sub_win</code>尝试将<code>main_win</code>导入回,但它无法正常工作,因为<code>MainWin</code>类在<code>sub_win</code>模块尝试导入时还不存在。你知道吗</p>
<p>有几种可能的解决办法。你知道吗</p>
<p>通常,最好的解决方案是消除两个类之间的循环依赖关系。循环导入是不被禁止的,但对它们的需求往往表明设计的草率。还有很多方法可以修复依赖关系。在示例代码中,根本不需要<code>SubWin</code>从<code>MainWin</code>继承,因此可以直接删除继承。如果他们确实需要共享一些共同的代码或信息,也许他们都应该从一个共同的祖先那里继承它(例如<code>Window</code>),共享的东西可以去那里。另一个选项将使这两个类不相关,但是<code>MainWin</code>将<code>SubWin</code>需要的信息传递给它的构造函数(例如<code>options = SubWin(some_data)</code>)。你知道吗</p>
<p>另一种选择可能是将<code>sub_win</code>的导入推迟到<code>main_win</code>命名空间中存在<code>MainWin</code>之后。您可以通过将<code>from sub_win import SubWin</code>语句移到代码中较低的位置来实现这一点。它可以保持在模块的顶层,在<code>MainWin</code>的定义之下,也可以放在<code>click</code>方法的内部,在那里使用它(因此它将是函数中的局部变量,而不是全局变量)。你知道吗</p>
<p>最后一个想法是将类放在同一个模块中,这样就根本不需要import语句。如果您的两个类像您当前的设计建议的那样紧密耦合,那么绝对没有理由将它们分离成单独的模块。Python与其他一些编程语言(如Java)非常不同,在Java中,默认情况下每个类都有自己的源文件。Python项目通常具有大型模块,其中包含许多类和全局函数。你只需要把你的模块分成几个部分,如果它们太大了,你会发现你经常使用它们的部分代码,而不需要其他部分。你知道吗</p>