Python import
имеет важную особенность в том, что он связывает две вещи вместе - как найти импорт и в какое пространство имен для него включить .
Это создает очень явный код:
import xml.sax
Указывает, где найти код, который мы хотим использовать, по правилам пути поиска Python.
В то же время все объекты, к которым мы хотим получить доступ, живут в этом точном пространстве имен, например xml.sax.ContentHandler
.
Я рассматриваю это как преимущество по требованию Руби. require 'xml'
может фактически сделать объекты внутри пространства имен XML
или любого другого пространства имен, доступного в модуле, без непосредственного указания из строки с требованием.
Если xml.sax.ContentHandler
слишком длинный, вы можете указать другое имя при импорте:
import xml.sax as X
И теперь он доступен под X.ContentHandler
.
Таким образом, Python требует от вас явного построения пространства имен каждого модуля. Таким образом, пространства имен Python очень «физические», и я объясню, что я имею в виду:
- По умолчанию только имена, определенные в модуле, доступны в его пространстве имен: функции, классы и т. Д.
- Чтобы добавить в пространство имен модуля, вы явно импортируете имена, которые хотите добавить, поместив их (по ссылке) «физически» в текущий модуль.
Например, если у нас есть маленький пакет Python «process» с внутренними подмодулями machine
и interface
, и мы хотим представить это как одно удобное пространство имен непосредственно под именем пакета, это и пример того, что мы можно записать в файл "определения пакета" process/__init__.py
:
from process.interface import *
from process.machine import Machine, HelperMachine
Таким образом, мы поднимаем то, что обычно доступно как process.machine.Machine
до process.Machine
. И мы добавляем все имена из process.interface
в process
пространство имен, в очень явной форме.
Преимущества импорта Python, о котором я писал, были просто два:
- Очистить что вы включаете при использовании
import
- Явный способ изменения пространства имен вашего собственного модуля (для импорта программы или других)