1

Я изучаю организацию приложений Python в разных структурах, и тот, который кажется мне наиболее естественным, не работает из-за того, что выглядит как циклическая зависимость. Цель организации - переместить классы в свои собственные файлы и позволить модулям управлять своими собственными __init__.py.Организация кода Python в модулях?

В любом случае, к коду. У меня есть приложение с этой структурой

/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

не должно быть 'from user.userdao import UserDao'? – arynhard

+0

Я пробовал этот код, и это нормально для меня, без ImportError. Я использую python 2.6.6 – Alexis

+0

Также тестировался на windows с python 2.7.3 без ошибок. – Alexis

ответ

0

Я думаю, что ошибка зависит от того, как написаны файлы user_*.py: если они говорят from user import UserDAO, то они должны быть округлены по коду в __init__.py, закончив выполнение. Чтобы этого избежать, они должны сказать from user.user_dao import UserDAO явно.

Смежные вопросы