Мне показалось, что я понял, что "импорт *" сделал и его потенциальные опасности , но, очевидно, нет.
У меня есть:
foo.py:
from datetime import datetime
from bar import *
print(datetime.now())
bar.py:
import datetime
Результат выполнения foo.py является исключением:
AttributeError: модуль «datetime» не имеет атрибута «now»
datetime
- это модуль, но datetime.datetime
- это тип. from datetime import datetime
делает так, что datetime
в foo.py ссылается на тип, но последующий from bar import *
как-то заставляет его снова обращаться к модулю.
Удаление from bar import *
исключает исключение.
Но почему from bar import *
загрязняет мое пространство имен модулем datetime
? datetime
- это модуль, импортированный в bar
, но он там не определен. Чего мне не хватает?