Python |将 class 导入测试脚本时出现 NameError

Python | NameError when importing a class into a test script

所以我有一个 Python 模块 (time.py),它定义了 "class Time"。然后我有一个导入 class 的测试脚本 (test_time.py),但是当我尝试创建 class 的实例时,它会抛出 NameError。 但是如果我将模块的名称更改为 time1.py 测试脚本工作正常。 我只是不明白为什么当模块被命名为 time.py。提前致谢。

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: 名称 '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

并使用更多 "complex" 名称重命名导入模块以避免此类不匹配是一个好习惯。

正如 Klaus D. 已经回答的那样,python 已经有一个时间模块。 Python import resolution 规定当你做 import time 时,python 检查 Python 中是否有全局安装的模块(在 Python 核心内或使用 pip 安装)名为 time。所以我建议您将文件名更改为 time1.py 或其他名称。