Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Import statment 
:(
    Опции темы
fell
Дата 4.4.2009, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 17.12.2008
Где: Санкт-Петербург

Репутация: нет
Всего: нет



добрый денек
Не так давно изучаю питон и django в частности. Вопрос такой,в теории по книжкам import работает у нас так - import module.attribute или 
from mudule import attribute, где модуль у нас обычно файл с расширением py, в котором может быть атрибут (класс или метод) нужный нам. Изучая django обнаружил такой вызов модуля from django.http import HttpResponse, что по идее должно было бы означать модуль http атрибут( метод, класс) HttpResponse. Модуль должен быть по идее файлом, который лежит в дире django, то есть http.py Пошел смотреть модуль (файл) ничего нет, метод HttpResponse обнаружился в файле __init__.py в папке http. Это какая то метода использовать классы в файле __init__.py ? почему не создать файл http.py и обозначить данные классы в нем, как это должно быть в теории ? 
PM MAIL WWW   Вверх
Daevaorn
Дата 4.4.2009, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 9
Всего: 70



Цитата(fell @  4.4.2009,  19:40 Найти цитируемый пост)
Пошел смотреть модуль (файл) ничего нет, метод HttpResponse обнаружился в файле __init__.py в папке http. Это какая то метода использовать классы в файле __init__.py ? почему не создать файл http.py и обозначить данные классы в нем, как это должно быть в теории ?  

http в данном случае пакет, а __init__.py это какбы точка входа в него. В принципе автором ничего не мешало, сделать просто модуль http.py, но они на перспективу слелали http пакетом.

Вообще это всё достаточно банальные вещи и хорошо описаны в документации http://docs.python.org/tutorial/modules.html#packages
PM MAIL WWW   Вверх
fell
Дата 4.4.2009, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 17.12.2008
Где: Санкт-Петербург

Репутация: нет
Всего: нет



я знаю о существовании пакетов, но что значит на перспективу ? не все же эксперты, есть соглашение о том, что модуль это файл, давайте придерживаться этого соглашения. 
PM MAIL WWW   Вверх
pythonwin
Дата 5.4.2009, 06:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2529
Регистрация: 18.4.2006
Где: за компом

Репутация: 14
Всего: 36



Цитата(fell @  5.4.2009,  00:15 Найти цитируемый пост)
я знаю о существовании пакетов, но что значит на перспективу ?

сделали пакет http в котором есть только один файл, чтобы потом добавить другие модули в этот пакет и не вызвать у программистов использующих этот пакет паники и необходимости переписывать их программы
PM WWW GTalk Jabber   Вверх
fell
Дата 5.4.2009, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 17.12.2008
Где: Санкт-Петербург

Репутация: нет
Всего: нет



а почему не добавить модули в этот же файл smile? раз оно так пошло, чтобы писать все в один файл
Вот у начинающих программистов точно возникнет паника, когда ожидаешь увидеть модуль, а его нет. Причем лезешь в книжку и там нет ответа на вопрос - вроде бы модули в файлах должны быть. А файл __init__.py имеет свое предназначение:
Package initialization 
The first time Python imports through a directory, it automatically runs all the 
code in the directory’s__init__.py file. Because of that, these files are a natural 
place to put code to initialize the state required by files in the package. For 
instance, a package might use its initialization file to create required data files, 
open connections to databases, and soon. Typically, __init__.py files are not 
meant to be useful if executed directly; they are run automatically when a pack- 
age is first accessed. 
так же module namespace initialization, from * statement behavior
Посколько он выполняются автоматически при доступе к пакету, этим и пользуются, чтобы запихать туда все нужные классы. Имхо это не очень хорошая практика. 

PM MAIL WWW   Вверх
Brainerazer
Дата 10.4.2009, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 21.4.2008
Где: Ukraine

Репутация: нет
Всего: нет



Лучше было бы сделать так: 
http
|
|
|---__init__.py
|---http.py

init.py:
from http import *

Если это, конечно, будет работать smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0714 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.