romankrv
Дек. 14, 2008 01:19:13
Здравствуйте
Небольшой вопрос по файлу __init__.py:
В каких случаях и почему нужено что бы код был в __init__.py так как в большенстве документации говорится что этот файл нужет индентификации каталога а о втором его предназначении мало сказано.
Спасибо
slav0nic
Дек. 14, 2008 02:47:02
когда при импорте пакета, необходимо произвести какие-то действия: инициализация чего-то, задание __all__ (который юзается при import *)
crchemist
Дек. 14, 2008 17:45:32
[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
>>>
balu
Дек. 15, 2008 08:24:02
Фактически это конструктор объекта
Андрей Светлов
Дек. 15, 2008 12:39:57
balu
На самом деле slav0nic правильно ответил - на уровне заданного вопроса.
А о том, чем является __init__.py фактически, можно долго и интересно разговаривать. Затронув тему, чем является модуль в Питоне вообще.
Например о том, что модуль не обязательно должен быть в sys.path.
Есть import hooks.
При этом не всегда стоит добавлять в sys.modules то, что выдал import hook.
Иногда полезны “анонимные модули” - на прошлой неделе опять потребовались.
И т.д.
Вообще-то для меня модуль - это объект, который позволяет разделять globals между его содержимым. Но такое определение ни разу не выглядит очевидным.