socket
- это модуль, содержащий класс socket
.
Вам нужно сделать socket.socket(...)
или from socket import socket
:
>>> import socket
>>> socket
<module 'socket' from 'C:\Python27\lib\socket.pyc'>
>>> socket.socket
<class 'socket._socketobject'>
>>>
>>> from socket import socket
>>> socket
<class 'socket._socketobject'>
Обратите внимание, что ошибка здесь довольно легко понять: если module object is not callable
, вы, вероятно, называете объект модуля! Что такое объект модуля? Это тот тип, который вы получаете при импорте модуля.
Но даже если вы этого не понимаете (это нормально, это часто путает, что классы, модули, функции и т. Д. - все это просто объекты, как все else), есть довольно простой способ начать отладку:
module object is not callable
. Похоже, я пытаюсь назвать то, что вы не можете назвать. Интересно, что я socket
. Это должно быть вызываемым! Интересно, является ли переменная socket
тем, что я думаю?` print socket
Проблема в том, что вы возвращаете true/false
в рамках обратного вызова .connect
.
Вы можете предоставить обратный вызов вашего метода Connect
, который даст вам статус соединения.
Connect(callback) {
// <Snip>
this.connection.connect(function(thrownError) {
console.log(thrownError);
if(thrownError == null) {
return callback(true);
} else {
return callback(false);
}
});
}
// Elsewhere
MYSQL.Connect(status => {
if (status) {
Log.Info("Successfully connected to database");
} else {
Log.Critical("Error connecting to database");
}
}
В мире узлов общая закономерность состоит в том, что обратный вызов принимает форму function(error, result)
, и вы проверяете, имеет ли error
значение, прежде чем продолжить.
Здесь статья о обратных вызовах.