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
或其他名称。
所以我有一个 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
或其他名称。