Если создать файл Python с именем, совпадающим с именем встроенного модуля (например, math.py
, random.py
, os.py
), произойдет замещение встроенного модуля.
Когда Python попытается импортировать модуль с этим именем (например, import math
), он сначала будет искать файл math.py
в текущей директории и в директориях, указанных в sys.path
.
Если файл math.py
будет найден раньше, чем встроенный модуль math
, Python импортирует именно этот файл. Это может привести к следующим последствиям:
math.py
не содержит тех же функций и констант, что и встроенный модуль math
, код, который опирается на эти функции, выдаст ошибки AttributeError
(например, AttributeError: module 'math' has no attribute 'sqrt'
).Важно помнить: Замещение встроенных модулей - это плохая практика. Это значительно ухудшает читаемость кода, делает его более хрупким и затрудняет отладку. Следует избегать использования имен встроенных модулей для своих файлов.
Пример:
# Создаем файл math.py в той же директории, что и основной скрипт
# math.py
def sqrt(x):
return x * 2 # Неправильная реализация квадратного корня
# main.py
import math
print(math.sqrt(9)) # Выведет 18, а не 3
В этом примере, при запуске main.py
будет использована функция sqrt
из вашего файла math.py
, а не из встроенного модуля math
. Результат будет неожиданным и неправильным.
Чтобы избежать этой проблемы, всегда используйте осмысленные и уникальные имена для своих файлов и модулей, которые не совпадают с именами встроенных модулей или стандартных библиотек Python.