Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 14, 2008 01:19:13

romankrv
От:
Зарегистрирован: 2008-05-23
Сообщения: 513
Репутация: +  0  -
Профиль   Отправить e-mail  

__init__.py content

Здравствуйте

Небольшой вопрос по файлу __init__.py:
В каких случаях и почему нужено что бы код был в __init__.py так как в большенстве документации говорится что этот файл нужет индентификации каталога а о втором его предназначении мало сказано.

Спасибо

Офлайн

#2 Дек. 14, 2008 02:47:02

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

__init__.py content

когда при импорте пакета, необходимо произвести какие-то действия: инициализация чего-то, задание __all__ (который юзается при import *)

Офлайн

#3 Дек. 14, 2008 17:45:32

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

__init__.py content

[crchemist@test tmp]$ cat pack/__init__.py
a = 10
[crchemist@test tmp]$ python
Python 2.5.2 (r252:60911, Jul 5 2008, 03:54:54)
[GCC 4.3.0 20080428 (Red Hat 4.3.0-8)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pack
>>> pack.a
10
>>> from pack import a
>>> a
10
>>>



Офлайн

#4 Дек. 15, 2008 08:24:02

balu
От:
Зарегистрирован: 2006-05-24
Сообщения: 521
Репутация: +  0  -
Профиль   Отправить e-mail  

__init__.py content

Фактически это конструктор объекта



Офлайн

#5 Дек. 15, 2008 12:39:57

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

__init__.py content

balu
На самом деле slav0nic правильно ответил - на уровне заданного вопроса.
А о том, чем является __init__.py фактически, можно долго и интересно разговаривать. Затронув тему, чем является модуль в Питоне вообще.
Например о том, что модуль не обязательно должен быть в sys.path.
Есть import hooks.
При этом не всегда стоит добавлять в sys.modules то, что выдал import hook.
Иногда полезны “анонимные модули” - на прошлой неделе опять потребовались.
И т.д.

Вообще-то для меня модуль - это объект, который позволяет разделять globals между его содержимым. Но такое определение ни разу не выглядит очевидным.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version