[New-bugs-announce] [issue27379] SocketType changed in Python 3

Martin Panter report at bugs.python.org
Thu Jun 23 23:19:57 EDT 2016


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 <report at bugs.python.org>
<http://bugs.python.org/issue27379>
_______________________________________


More information about the New-bugs-announce mailing list