Открытие сокетов в Python довольно просто. Вам действительно просто нужно что-то вроде этого:
import socket
sock = socket.socket()
sock.connect((address, port))
и затем Вы можете send()
и recv()
как любой другой сокет
Что на самом деле происходит с конструктором, так это то, что среда выполнения использует данные типа, сгенерированные компилятором, чтобы определить, сколько места необходимо для хранения экземпляра объекта в памяти, будь то в стеке или в куче.
Это пространство включает в себя все переменные-члены и файл vtbl. После выделения этого пространства конструктор вызывается как внутренняя часть процесса создания и инициализации для инициализации содержимого полей.
Затем, когда конструктор завершает работу, среда выполнения возвращает вновь созданный экземпляр. Итак, причина, по которой конструктор не возвращает значение, заключается в том, что он не вызывается напрямую вашим кодом, он вызывается кодом выделения памяти и инициализации объекта во время выполнения.
Его возвращаемое значение (если оно действительно есть при компиляции в машинный код) непрозрачно для пользователя, поэтому вы не можете его указать.
все ответы смещены в сторону C ++ / Java. нет причин, по которым конструктор не возвращает значение, отличное от языкового дизайна.
посмотрите на конструктор в более широком смысле: это функция, которая создает новый объект. вы можете написать совершенно допустимые конструкторы на C:
typedef struct object object;
int object_create( object **this );
это идеальное ООП на C, и конструктор возвращает значение (это также можно назвать фабрикой, но имя зависит от намерения).
, однако, для автоматического создания объекта (например, для удовлетворения некоторого приведения типа или преобразования), должны быть определены некоторые правила. в C ++ есть конструктор без аргументов, который выводится компилятором, если он не определен.
обсуждение шире, чем мы думаем. Объектно-ориентированное программирование - это имя, которое описывает способ мышления о программировании. ОО можно использовать практически на любом языке: все, что вам нужно, это структуры и функции. основные языки, такие как C ++ и Java, настолько распространены, что мы думаем, что они определяют «путь». Теперь посмотрим на объектно-ориентированную модель в Ada: она далека от модели C ++, но все еще остается объектно-ориентированной. я уверен, что у таких языков, как Lisp, есть и другие способы объектно-ориентированного программирования.
Конструктор - это метод, автоматически вызываемый при инициализации нового экземпляра объекта.
Этот метод есть, если вам нужно инициализировать ваш объект в заданном состоянии и запустить несколько методов по умолчанию.
На самом деле вы можете представить, что конструктор всегда возвращает экземпляр созданного объекта, который был бы хорошим изображением.
Когда вы вызываете конструктор, возвращаемое значение - это новый объект:
Point pt = new Point(1,2);
Но внутри самого конструктора вы фактически не создаете и не возвращаете объект; он был создан до запуска вашего кода, вы просто устанавливаете начальные значения.
Point::Point(int x, int y) {
this->x = x;
this->y = y;
}
Отсутствие возвращаемого типа отражает тот факт, что конструкторы используются иначе, чем другие функции. Тип возврата null
, хотя технически точен, не очень хорошо отражает тот факт, что код используется , как если бы он возвращал объект. Однако любой другой тип возвращаемого значения будет означать, что ваш код должен возвращать
что-то в конце, что также неверно.
(Я предвзято отношусь к C ++, поэтому в отношении других языков воспринимайте это с недоверием.)
Краткий ответ: вы не хотите явно проверять успех для каждой отдельной конструкции объекта в вашем коде.
Несколько более длинный ответ: в C ++ конструкторы вызываются динамически, а также для глобально и автоматически выделяемых объектов. В этом коде
void f()
{
std::string s;
}
конструктор s
( std :: string :: string ()
) не может вернуть какое-либо значение. Либо он успешен - тогда мы можем использовать объект, либо он вызывает исключение - у нас никогда не будет возможности попытаться его использовать.
ИМО, так и должно быть.
Как конструктор должен возвращать возвращаемое значение? Оператор new
возвращает вновь созданный экземпляр. Вы не вызываете ctor, new
делает это.
MyClass instance = new MyClass();
Если ctor возвращает значение, например:
public int MyClass()
{
return 42;
}
Где вы получите целое число?
В каком-то смысле он возвращает только что созданный экземпляр.
Вы даже называете его так, например, Java
Object o = new Something();
, который выглядит так же, как вызов "обычного "метод с возвращаемым значением
Object o = someMethod();