В верхней части вашего скрипта выглядит, как вы выполнили:
from socket import *
Или что-то "относительно" большое, которое приносит socket
имен непосредственно в ваше глобальное пространство имен.
Вы не должны этого делать, потому что это плохая практика и вызывает такие проблемы, как та, с которой вы сталкиваетесь, когда вы путаете socket.socket
(класс) с socket
(модуль). Ваше пространство имен запуталось со всем, что импортируется из модуля сокетов, а это много:
>>> import socket
>>> len(socket.__all__)
241
(__all__
- переменная модуля, которая задает публичные имена для модуля и определяет, что экспортируется, когда кто-то выполняет from x import *
на вашем модуле).
241 - это множество различных имен, которые нужно импортировать в глобальное пространство имен (при условии, что это так), и дает вам множество веревок, с помощью которых можно повеситься, вплоть до перезаписи или случайного повторного использования переменных, которые были импортированы из socket
.