我有一个模块robot.py
,它有一个类似命名的类。我还有一个cop.py
模块和一个robber.py
模块,每个模块都有类似命名的类,每个模块都来自Robot
。我把它们分开以保持文件更短。
在创建Robot
对象时,Robot
有多个Cop
和Robber
属性(即每个Robot
都有一些其他警察和劫匪跟踪)。
我已经解决了Robot.py
中以下(简化)代码结构的循环导入问题,其中我将模块导入语句置于最底层:
class Robot(object):
def __init__(self):
self.other_cop = cop_module.Cop()
self.other_robber = robber_module.Robber()
import cops_and_robots.robo_tools.cop as cop_module
import cops_and_robots.robo_tools.robber as robber_module
(当然,每个Cop.py
和Robber.py
的文件开头都有from cops_and_robots.robo_tools.robot import Robot
这在实践中很好用。但是,当我尝试使用Sphinx进行autodoc时,我遇到了以下问题:
/Users/nick/Dropbox/Syncs/Code/Github/cops_and_robots/src/cops_and_robots/docs/cops_and_robots.robo_tools.rst:41: WARNING: autodoc: failed to import module u'cops_and_robots.robo_tools.robber'; the following exception was raised:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 335, in import_object
__import__(self.modname)
File "/Users/nick/Dropbox/Syncs/Code/Github/cops_and_robots/src/cops_and_robots/robo_tools/robber.py", line 22, in <module>
from cops_and_robots.robo_tools.robot import Robot
File "/Users/nick/Dropbox/Syncs/Code/Github/cops_and_robots/src/cops_and_robots/robo_tools/robot.py", line 520, in <module>
import cops_and_robots.robo_tools.robber as robber_module
AttributeError: 'module' object has no attribute 'robber'
我是否有一个很好的方法来重构我的代码或修改Sphinx,这样我就不会陷入这种循环依赖问题了?