New submission from Martin Panter:

In the documentation for Python 2 and 3, socket.SocketType is defined as:

This is a Python type object that represents the socket object type. It is the 
same as “type(socket(...))”.

In Python 2 it is a standalone “socket._socketobject” class, which holds a 
“_socket.socket” instance as an internal “_sock” attribute. So the 
documentation and implementation are consistent. But since revision 
8e062e572ea4, Python 3 no longer defines SocketType directly, and just imports 
the “_socket.SocketType” definition, which is an alias of “_socket.socket”. The 
change also defines “socket.socket” as a subclass of this low-level class. The 
result is that SocketType is not the exact type, but only a base class:

>>> s = socket.socket()
>>> type(s)
<class 'socket.socket' at 0x2347d48>
>>> SocketType
<class '_socket.socket' at 0x7ff9e2522280>
>>> type(s) is SocketType  # Should be true according to documentation
False
>>> isinstance(s, SocketType)
True

Should the documentation just be amended, or should SocketType be changed? If 
SocketType is not changed, perhaps we should document that socket.socket() is a 
class, not just a function, and maybe deprecate SocketType.

----------
messages: 269153
nosy: martin.panter
priority: normal
severity: normal
status: open
title: SocketType changed in Python 3
versions: Python 3.5, Python 3.6

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue27379>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to