Когда у вас есть хорошо написанная библиотека, что иногда встречается в python, вы должны просто импортировать ее и использовать как есть. Хорошо написанная библиотека имеет тенденцию брать жизнь и язык самостоятельно, в результате чего получается приятный для чтения код, где вы редко ссылаетесь на библиотеку. Когда библиотека написана хорошо, вам не нужно слишком часто переименовывать или что-либо еще.
import gat
node = gat.Node()
child = node.children()
Иногда невозможно написать это таким образом, или тогда вы захотите убрать вещи из библиотеки, которую вы импортировали.
from gat import Node, SubNode
node = Node()
child = SubNode(node)
Иногда вы делаете это для многих вещей, если ваша строка импорта переполняет 80 столбцов, это хорошая идея сделать это:
from gat import (
Node, SubNode, TopNode, SuperNode, CoolNode,
PowerNode, UpNode
)
Лучшая стратегия - сохранить все эти операции импорта в верхней части файла. Предпочтительно упорядочить в алфавитном порядке, сначала импортировать -statements, а затем из import -statements.
Теперь я скажу вам, почему это лучшее соглашение.
В Python вполне мог бы быть автоматический импорт, который бы искал значение из основного импорта, если его нельзя найти в глобальном пространстве имен. Но это не очень хорошая идея. Я коротко объясню почему. Помимо того, что это сложнее в реализации, чем простой импорт, программисты не будут так много думать о зависимостях и выяснять, откуда вы импортировали вещи, следует делать не так, как просто просмотр импорта.
Необходимость выяснить зависимости - одна из причин, по которой люди ненавидят "из ... импорта *". Хотя существуют и плохие примеры, где вам нужно это сделать, например, opengl -wrappings.
Таким образом, определения импорта на самом деле ценны как определение зависимостей программы. Это способ, которым вы должны их использовать. Из них вы можете быстро проверить, откуда импортирована какая-то странная функция.