2013-04-02 5 views
0

У меня есть этот файл strtucture:питон "пакет импорта, как" странное поведение

mainfolder 
    package/ 
     __init__.py 
     packagefile.py 

__init__.py:

import packagefile as othername 

import package Если я из Главной папки, package будет packagefile и othername тоже. Что происходит ? Он импортируется дважды? У меня есть python 2.7.3. Это ожидаемое поведение? Когда я сделаю import sys as something_else, sys не будет присутствовать в текущем пространстве имен.

ответ

2

Да, это ожидаемое поведение. В принципе, пакет всегда содержит модули внутри него. То, что вы делаете, также импортирует один из этих модулей в качестве другого имени. Это не препятствует тому, чтобы он уже был определен как его оригинальное имя.

Я не считаю, что это имеет отрицательные негативные последствия. Например, вы были войти в интерактивный терминал вы должны увидеть это:

>>> package.packagefile is package.othername 
True 

Это указывает, что они являются ссылки на тот же объект - подобные сравнения двух указателей в C++, например.

Однако, если вы просто пытаетесь переименовать член модуля, я предлагаю просто переименовать файл.

+0

, но когда я удаляю инструкцию 'import' из' __init __ .py' и 'import package', пакетный файл также не будет импортирован. Так что же такое '__init __. Py'? – kissgyorgy

+0

'__init __. Py' по-прежнему необходимо назначить папку в виде пакета. Вы можете получить пакетный файл двумя способами: 'import package.packagefile' и access by' package.packagefile' или 'from package packagefile' и получить доступ к' packagefile' –

+0

Вы также должны прочитать официальную документацию модулей Python - http: //docs.python.org/2/tutorial/modules.html - есть много нюансов и разных способов сделать то, что я не мог здесь войти. –

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