擅长:python、mysql、java
<p>循环进口并不是一件坏事。当<code>user</code>使用<code>team</code>时,<code>team</code>代码依赖<code>user</code>是很自然的。</p>
<p>这里更糟糕的做法是<code>from module import member</code>。<code>team</code>模块试图在导入时获取<code>user</code>类,<code>user</code>模块试图获取<code>team</code>类。但是<code>team</code>类还不存在,因为在运行<code>user.py</code>时,您仍然位于<code>team.py</code>的第一行。</p>
<p>相反,只导入模块。这将导致更清晰的名称空间,使以后的monkey补丁成为可能,并解决了导入问题。因为您只在导入时导入<em>模块</em>,所以您并不关心它内部的<em>类</em>还没有定义。等你开始使用这个课程的时候,它就可以了。</p>
<p>所以,test/users.py:</p>
<pre><code>import test.teams
class User:
def setTeam(self, t):
if isinstance(t, test.teams.Team):
self.team = t
</code></pre>
<p>测试/团队.py:</p>
<pre><code>import test.users
class Team:
def setLeader(self, u):
if isinstance(u, test.users.User):
self.leader = u
</code></pre>
<p>如果您想少写<code>test</code>,那么<code>teams.Team</code>也可以。仍然在导入一个模块,而不是一个模块成员。</p>
<p>另外,如果<code>Team</code>和<code>User</code>相对简单,则将它们放在同一个模块中。您不需要遵循Java的“每个文件一个类”习惯用法。对我来说,<code>isinstance</code>测试和<code>set</code>方法也会发出不符合语法的Java wart的尖叫;根据您正在做的工作,您最好使用一个简单的、非类型检查的<code>@property</code>。</p>