Импорт в __init__.py
, по-видимому, ведет себя по-разному, когда файл запускается, когда он импортируется.
Если у нас есть следующие файлы:
run.py
:
import test
test/b.py
:
class B(object):
pass
test/__init__.py
:
from b import B
print B
print b
Если мы запустим __init__.py
, мы получим ошибку, как я ожидаю:
% python test/__init__.py
<class 'b.B'>
Traceback (most recent call last):
File "test/__init__.py", line 6, in <module>
print b
NameError: name 'b' is not defined
Но если мы run.py
, то мы не имеем:
% python run.py
<class 'test.b.B'>
<module 'test.b' from '~/temp/test/b.py'>
Я бы ожидал, что поведение будет одинаковым. Почему это работает?
Это работает, только если мы делаем это в __init__.py
. Если мы:
mv __init__.py a.py
touch __init__.py
и сделайте run.py
:
import test.a
Затем мы получаем ошибку.