循环进口本质上不是一件坏事。team
代码自然地依赖,user
而使用进行user
某些操作team
。
这里最糟糕的做法是from module import member
。该team
模块正在尝试user
在导入时获取该类,而该user
模块正在尝试获取team
该类。但是team
该类尚不存在,因为您仍处于team.py
whenuser.py
运行的第一行。
而是,仅导入模块。这样可以更清晰地命名空间,使以后的猴子修补成为可能,并解决了导入问题。因为您只是在导入时导入 模块 ,所以您不在乎尚未定义 模块 中的 类 。等到您开始使用该类时,它就会成为现实。
因此,test / users.py:
import test.teams
class User:
def setTeam(self, t):
if isinstance(t, test.teams.Team):
self.team = t
测试/teams.py:
import test.users
class Team:
def setLeader(self, u):
if isinstance(u, test.users.User):
self.leader = u
from test import teams
然后teams.Team
,如果您想test
少写,也可以。那仍然是导入模块,而不是模块成员。
另外,如果Team
和User
比较简单,请将它们放在同一模块中。您无需遵循Java每个文件一个类的习惯用法。该isinstance
测试和set
方法也尖叫unpythonic- Java的疣给我; 根据您在做什么,最好使用普通的,非类型检查的@property
。