循环进口本质上不是一件坏事。
team代码自然地依赖,
user而使用进行
user某些操作
team。
这里最糟糕的做法是
from module importmember。该
team模块正在尝试
user在导入时获取该类,而该
user模块正在尝试获取
team该类。但是
team该类尚不存在,因为您仍处于
team.pywhen
user.py运行的第一行。
而是,仅导入模块。这样可以更清晰地命名空间,使以后的猴子修补成为可能,并解决了导入问题。因为您只是在导入时导入 模块 ,所以您不在乎尚未定义 模块
中的 类 。等到您开始使用该类时,它就会成为现实。
因此,test / users.py:
import test.teamsclass User: def setTeam(self, t): if isinstance(t, test.teams.Team): self.team = t
测试/teams.py:
import test.usersclass 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。



