我想我明白了什么是“进口*”做了和它的潜在危险,但显然不是。我有:foo.py:from datetime import datetimefrom bar import *print(datetime.now())酒吧.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,但它没有在那里定义。我错过了什么?
1 回答
白衣染霜花
TA贡献1796条经验 获得超10个赞
该bar
模块确实定义了一个 name datetime
。该声明
import datetime
在模块中创建模块级datetime
变量bar
并将变量绑定到datetime
模块。import *
以获取其他名称的相同方式获取此名称。
import *
不关心对象是在哪里创建的。它不在乎datetime
模块本身来自其他文件。中datetime
存在名称bar
,以便导入该名称。
添加回答
举报
0/150
提交
取消