Оно говорит module object is not callable, потому что ваш код вызывает объект module. Объект module - это тип объекта, который вы получаете при импорте модуля. То, что вы пытались сделать, это вызвать объект class внутри объекта module, который, оказывается, имеет то же имя, что и модуль, который его содержит.
Вот способ логического устранения такого рода ошибок:
"module object is not callable. Python сообщает мне, что мой код пытается вызвать что-то, что не может быть вызвано. Что пытается вызвать мой код?"
"Код пытается вызвать socket. Это должно быть вызываемым! Является ли переменная socket тем, что я думаю?`
Я должен распечатать, что такое сокет, и проверить print(socket)
Ответ 2
Предположим, что содержимое YourClass.py является:
classYourClass: # ......
Если вы используете:
from YourClassParentDir import YourClass # means YourClass.py
Таким образом, вы получите TypeError: объект 'module' нельзя вызвать, если вы затем попытаетесь вызвать YourClass().
Но, если вы используете:
from YourClassParentDir.YourClass import YourClass # means Class YourClass
или используйте YourClass.YourClass(), это работает.
Ответ 3
Добавьте в main __init__.py в YourClassParentDir , например:
from .YourClass import YourClass
Тогда у вас будет готовый экземпляр вашего класса, когда вы импортируете его в другой скрипт:
from YourClassParentDir import YourClass
Ответ 4
Краткий ответ: Вы вызываете файл / каталог как функцию, а не реальную функцию
Читать дальше:
Такого рода ошибка возникает, когда вы импортируете модуль, думая о нем как о функции, и вызываете его. Итак, в python модуль представляет собой файл .py. Пакеты (каталоги) также могут рассматриваться как модули. Допустим, у меня есть create.py файл. В этом файле у меня есть функция, подобная этой:
#inside create.py defcreate(): pass
Теперь, в другом файле кода, если мне понравится это:
#inside main.py file import create create() #here create refers to create.py , so create.create() would work here
Это выдает эту ошибку, поскольку я вызываю create.py файл как функцию. итак, я должен сделать это: