在模块中组织Python代码?

时间:2013-08-21 06:05:09

标签: python python-2.7 module circular-dependency code-organization

我正在探索将Python应用程序组织到不同的结构中,对我来说最自然的那个应用程序不起作用,因为看起来像循环依赖。该组织的目标是将类移动到他们自己的文件中,让模块由他们自己的__init__.py控制。

无论如何对代码。我有一个具有这种结构的应用程序

/app
  |__ user
  |    |__ __init__.py
  |    |__ user_dao
  |    |__ user_dto
  |    |__ user_record
  |
  |_app.py 

之后,/app/user/__init__.py看起来像这样。

from user_dao import UserDAO
from user_dto import UserDTO
from user_record import UserRecord

并且所有用户对象在liniar对象图UserDTO -> UserDAO -> UserRecord中相互依赖,其中->等同于"取决于"。

最后在app.py中有类似于

的内容
from user import UserDAO
from user import UserDTO

当应用尝试运行时,我收到错误

ImportError UserDAO

带有指向循环依赖关系的堆栈跟踪。有没有更好的方法在Python中组织类似的代码,除了将所有类放在同一个文件中,以便模块工作。

有关python应用程序设计的任何建议都很有帮助,谢谢。

1 个答案:

答案 0 :(得分:0)

我认为错误取决于user_*.py文件的编写方式:如果他们也说from user import UserDAO,那么它们将循环依赖__init__.py中已完成执行的代码。为避免这种情况,他们应该明确地说from user.user_dao import UserDAO