Питон |NameError при импорте класса в тестовый скрипт - PullRequest
0 голосов
/ 26 марта 2019

, поэтому у меня есть модуль Python (time.py), который определяет «класс Time».Затем у меня есть тестовый скрипт (test_time.py), который импортирует класс, но когда я пытаюсь создать экземпляр класса, он генерирует 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' не определено

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

Как уже ответил Клаус Д., в python уже есть модуль времени. Разрешение импорта Python диктует, что когда вы делаете import time, python проверяет, есть ли глобально установленный модуль в Python (внутри ядра Python или установлен с помощью pip) с именем time. Поэтому я предлагаю вам изменить имя файла, как вы сказали time1.py или что-то еще.

0 голосов
/ 26 марта 2019

Поскольку время также является модулем стандартной библиотеки, но оно не содержит объекта 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

а также переименовывайте ваши модули импорта из более «сложных» имен, чтобы избежать таких несоответствий - хорошая практика.

...