2015-01-12 1 views
1

Это открытие кода из the Flask mega-tutorial.Что происходит в этом вступительном фляге?

Давайте начнем с создания простой инициализации сценарий для нашего приложения пакета (файл приложение/инициализации .py):

from flask import Flask 

app = Flask(__name__) 
from app import views 

Сценарий выше просто создает объект приложения (класса Flask), а затем импортирует модуль представлений, который мы еще не написали .

Я не уверен, что здесь происходит. Если app является экземпляром класса, как мы используем import? Линия from app import views не имеет для меня никакого смысла. Может ли кто-нибудь помочь мне понять, что здесь происходит? Зачем нам нужно создавать экземпляр класса, чтобы что-то импортировать?

ответ

6

Несчастное столкновение имен! from app import относится к модулю или пакетуapp (созданных незадолго до этого кода в учебнике по mkdir app и редактированию этого __init__.py в нем), ничего общего с именем переменногоapp, которые действительно относятся к экземпляру класса.

В последней строке import this превозносит, пространств имен действительно великая вещь, - но когда они используются неявно (как в from и import, чье пространство имен вполне отдельно от модуля) может быть приятнее и менее запутанной во всяком случае избегать преднамеренно сталкивающихся имен ... потому что, если этого не происходит, путаница со стороны читателя почти неизбежна. Авторы уроков должны быть особенно осторожны в этом!

+0

О, это очень ясно, немного глупый выбор со стороны автора! Должны ли не все импортные товары идти вверху? Зачем ему это делать после создания экземпляра приложения? Не то, чтобы вы были автором, но есть ли какие-то конкретные соображения, о которых вы можете думать? – Aerovistae

+0

@Aerovistae Представления импортируются после создания приложения, поскольку они зависят от приложения, поэтому это позволяет избежать циклического импорта. Это упоминается в документах и, вероятно, в учебнике. Продолжай читать. – davidism

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

  • Нет связанных вопросов^_^