所以我有一个Python模块(time.py),它定义了“类时间”。然后,我有一个导入该类的测试脚本(test_time.py),但是当我尝试创建该类的实例时,它将引发NameError。 但是,如果我将模块的名称更改为time1.py,则测试脚本可以正常工作。我只是想不出为什么当模块名为 time.py 时,它无法正常工作em>。预先感谢。
time.py:
class Time:
def __init__(self, init_hr = 12, init_min = 0, init_ampm = "AM"):
self.hr = init_hr
self.min = init_min
self.ampm = init_ampm
def ..... etc.
test_time.py:
from time import *
if __name__ == "__main__":
t1 = Time()
t2 = ...... etc.
我运行 test_time.py:
时遇到的错误NameError:名称“时间”未定义
答案 0 :(得分:0)
因为时间也是标准库的模块,但是它不包含Time对象。 如果您尝试获取通过以下方式导入的模块目录:
import time
print(time.__file__)
您会收到类似这样的错误:
AttributeError: 'builtin_function_or_method' object has no attribute '__file__'
如果将time.py重命名为time1.py,则可以解决此不匹配问题,并且测试脚本将使用您的本地模块。
import time1
print(time1.__file__)
然后您得到:
/<path-to-your-directory>/time1.pyc
如果您指定要从每个模块导入的内容,则可以避免这种不匹配,因为这样会立即给您带来错误:
from time import Time
您得到:
ImportError: cannot import name Time
,并使用更“复杂”的名称重命名您的导入模块,以避免这种不匹配是一种好习惯。
答案 1 :(得分:0)
正如Klaus D.已经回答的那样,python已经有一个时间模块。 Python导入解析规定,当您执行import time
时,python会检查Python中是否有全局安装的模块(在Python内核内部或通过pip安装)称为time
。因此,建议您将文件名更改为您对time1.py
或其他内容说过。