Подтвердить что ты не робот

Модуль не имеет атрибута

У меня есть каталог с количеством файлов .py. каждый файл определяет некоторые классы. У меня также есть пустой __init__.py в каталоге.

Например:

myproject
    __init__.py
    mymodule
        __init__.py
        api.py
        models.py
        views.py

Я пытаюсь импортировать mymodule и получить доступ к классам, определенным во всех этих файлах:

from myproject import mymodule

print mymodule.api.MyClass 

Это дает мне ошибку, говоря, что mymodule не имеет атрибута api. Зачем? И почему я могу получить доступ только к одному из файлов (models.py), а не к другим?

In [2]: dir(banners)
Out[2]:
['__builtins__',
 '__doc__',
 '__file__',
 '__name__',
 '__package__',
 '__path__',
 'models']
4b9b3361

Ответ 1

Проблема заключается в том, что подмодули не импортируются автоматически. Вы должны явно импортировать модуль api:

import myproject.mymodule.api
print myproject.mymodule.api.MyClass

Если вы действительно настаиваете на доступности api при импорте myproject.mymodule, вы можете поместить его в myproject/mymodule/__init__.py:

import myproject.mymodule.api

Тогда это будет работать, как ожидалось:

from myproject import mymodule

print mymodule.api.MyClass 

Ответ 2

Вам также понадобится __init__.py в каталоге myproject. Поэтому ваша структура модуля должна быть:

myproject
    __init__.py
    mymodule
        __init__.py
        api.py
        models.py
        views.py

Ответ 3

Модули не работают.

from myproject.mymodule import api
print api.MyClass