Как я могу проверить, как стандартные классы (например, сокет) реализуют свои богатые сравнения (например, `__eq__`) в Python3? - PullRequest
0 голосов
/ 08 июля 2019

Как проверить, как стандартные классы (например, сокет) реализуют свои расширенные сравнения (например, __eq__) в Python3?

Я изучаю Python и внедрил веб-сервер на этом языке.

Я не уверен, безопасно ли сравнивать сокеты по ==, чтобы определить, является ли сокет прослушивающего сервера s частью списка чтения, возвращаемого select.select().

Я ознакомился с документацией по сокетам (см. Ниже), но поиск по запросу «равно» ничего не показывает.

Существует ли общее правило, что богатые сравнения остаются неосуществленными, если не указано иное? Если да, то как выполняется сравнение?

Ссылки:

https://docs.python.org/2/reference/datamodel.html#object.cmp https://docs.python.org/3/library/socket.html

1 Ответ

1 голос
/ 09 июля 2019

Я бы спросил Python, что такое __eq__, e. g.:

>>> socket.socket.__eq__
<slot wrapper '__eq__' of 'object' objects>

Из этого я бы заключил, что модуль socket не реализует свое собственное расширенное сравнение для объекта socket, а использует общий метод для object объектов.

Возможно, вы также захотите прочитать о Типе метода-оболочки Python?

По умолчанию <strong>eq</strong> сравнивает объекты по их адресу (id()), верно? Откуда я знаю, что эта функция, реализованная на C, делает это?

Чтобы знать наверняка, вы можете посмотреть на источник; см. Каков исходный код хеша () и eq () объекта в Python?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...