РЕДАКТИРОВАТЬ **: пользовательский собственный модуль datetime.py переопределял стандартную библиотеку, информация, представленная ниже, все еще полезна, чтобы понять, почему это произойдет.Алгоритм импорта сначала проверяет ваш непосредственный каталог.Вы можете проверить путь к файлу этих модулей с помощью:
print a_module.__file__
Добро пожаловать в дикий мир программирования.Поэтому я не уверен, что полностью понимаю ваш вопрос, поэтому постараюсь разобрать некоторые вещи и оставить место для обсуждения.
Когда вы импортируете datetime, вы импортируете то, что называется module ,Не вдаваясь в подробности, модули являются так называемыми пространствами имен, они служат для создания разделения атрибутов в иерархии, поэтому вы случайно не перезаписываете другой код при импорте.Вы можете прочитать подробнее об этом здесь:
https://docs.python.org/3/tutorial/modules.html
Модуль datetime предоставляет классы для управления датами и временем как простыми, так и сложными способами.Хотя арифметика даты и времени поддерживается, основное внимание в реализации уделяется эффективному извлечению атрибутов для форматирования и обработки выходных данных.Для получения информации о соответствующих функциях см. Также модули времени и календаря.
Когда вы импортируете его и запустите метод type для него, вы должны увидеть следующие результаты:
>>>import datetime
>>> type(datetime)
<class 'module'>
ВстроенныйДокументация метода типа гласит следующее:
4.12.6.Объекты типа Объекты типа представляют различные типы объектов.Доступ к типу объекта осуществляется с помощью встроенной функции type ().Там нет специальных операций над типами.Стандартные типы модулей определяют имена для всех стандартных встроенных типов.
, когда вы явно печатаете этот вывод, это будет тот же результат:
>>> print(type(datetime))
<class 'module'>
Модули выставляют атрибуты при импорте.Атрибут, к которому вы обращаетесь, является атрибутом datetime модулей datetime, который является class , который просто имеет то же имя.Поэтому, когда вы обращаетесь к нему, он выглядит как datetime.datetime
. Этот класс поддерживает метод (который также является атрибутом класса, а не модуля) с именем "now".Итак, когда вы обращаетесь к этому методу, он выглядит как datetime.datetime.now () для его вызова.
Если вы хотите упростить эту иерархию при импорте, вы можете пояснить, что вам нужен только класс datetime из модуля datetime:
from datetime import datetime
#and the access its now method simpler
d1 = datetime.now()
Это может помочь с проблемами доступа к атрибутам, этоможет быть вопрос путаницы.Если вы хотите больше прояснить свою проблему, пожалуйста, не стесняйтесь!
Надеюсь, это поможет.