2013-03-10 4 views
2

Я новичок в python и обнаружил, что могу импортировать модуль без импорта каких-либо классов внутри него. У меня есть следующая структура -Что означает импорт модуля в python?

myLib/ 
    __init__.py 
    A.py 
    B.py 

driver.py 

Внутри driver.py я следующее -

import myLib 
tmp = myLib.A() 

Я получаю следующую ошибку, пытаясь запустить его. AttributeError: объект 'module' не имеет атрибута A

Eclipse не жалуется, когда я это делаю, на самом деле автозаполнение показывает A при вводе myLib.A.

Что это значит, когда я импортирую модуль, а не какие-либо классы внутри него?

Благодаря

P

+1

'myLib' не является' модулем', а 'пакетом'. 'A' и' B' являются модулями. –

ответ

4

Python не является Java. A и B не являются классами. Это модули. Им нужно импортировать их отдельно. (А myLib не модуль, а пакет.)

Модули A и B сами могут содержать классы, которые могут или не могут быть названы A и B. Вы можете иметь столько классов в модуле, сколько хотите - или даже вообще нет, так как вполне возможно написать большую программу Python без классов.

Чтобы ответить на ваш вопрос, при импорте myLib просто помещает имя myLib в ваше текущее пространство имен. Все, что в __init__.py будет выполнено: если этот файл сам определяет или импортирует какие-либо имена, они будут доступны в качестве атрибутов myLib.

Если вы from myLib import A, вы уже импортировали модульA в текущее пространство имен. Но опять же, любой из его классов по-прежнему нужно ссылаться через имя A: так что если у вас есть класс A, вы должны создать его через A.A().

Третий вариант состоит в том, чтобы сделать from myLib.A import A, который импортирует классA в ваше текущее пространство имен. В этом случае вы можете просто позвонить A(), чтобы создать экземпляр класса.

+0

Ах. Благодаря! Именно эту информацию я ищу. – R11

1

Вам нужно сделать

from mylib import A 

Поскольку A не является атрибутом __init__.py внутри mylib

Когда вы import mylib импортирует __init__.py

См. Мой ответ. About packages

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