bpo-25415: Remove confusing sentence from IOBase docstrings (PR-31631)

(cherry picked from commit cedd2473a9bebe07f3ced4f341cf58a2fef07b03)

Co-authored-by: slateny <46876382+slateny@users.noreply.github.com>
diff --git a/Doc/library/io.rst b/Doc/library/io.rst
index de88c57..d512334 100644
--- a/Doc/library/io.rst
+++ b/Doc/library/io.rst
@@ -306,8 +306,7 @@
 
 .. class:: IOBase
 
-   The abstract base class for all I/O classes, acting on streams of bytes.
-   There is no public constructor.
+   The abstract base class for all I/O classes.
 
    This class provides empty abstract implementations for many methods
    that derived classes can override selectively; the default
@@ -461,8 +460,7 @@
 
 .. class:: RawIOBase
 
-   Base class for raw binary streams.  It inherits :class:`IOBase`.  There is no
-   public constructor.
+   Base class for raw binary streams.  It inherits :class:`IOBase`.
 
    Raw binary streams typically provide low-level access to an underlying OS
    device or API, and do not try to encapsulate it in high-level primitives
@@ -515,7 +513,7 @@
 .. class:: BufferedIOBase
 
    Base class for binary streams that support some kind of buffering.
-   It inherits :class:`IOBase`. There is no public constructor.
+   It inherits :class:`IOBase`.
 
    The main difference with :class:`RawIOBase` is that methods :meth:`read`,
    :meth:`readinto` and :meth:`write` will try (respectively) to read as much
@@ -852,8 +850,7 @@
 .. class:: TextIOBase
 
    Base class for text streams.  This class provides a character and line based
-   interface to stream I/O.  It inherits :class:`IOBase`.  There is no public
-   constructor.
+   interface to stream I/O.  It inherits :class:`IOBase`.
 
    :class:`TextIOBase` provides or overrides these data attributes and
    methods in addition to those from :class:`IOBase`:
diff --git a/Lib/_pyio.py b/Lib/_pyio.py
index 56e9a0c..fb867fb 100644
--- a/Lib/_pyio.py
+++ b/Lib/_pyio.py
@@ -338,8 +338,7 @@ class UnsupportedOperation(OSError, ValueError):
 
 class IOBase(metaclass=abc.ABCMeta):
 
-    """The abstract base class for all I/O classes, acting on streams of
-    bytes. There is no public constructor.
+    """The abstract base class for all I/O classes.
 
     This class provides dummy implementations for many methods that
     derived classes can override selectively; the default implementations
@@ -1845,7 +1844,7 @@ class TextIOBase(IOBase):
     """Base class for text I/O.
 
     This class provides a character and line based interface to stream
-    I/O. There is no public constructor.
+    I/O.
     """
 
     def read(self, size=-1):
diff --git a/Modules/_io/iobase.c b/Modules/_io/iobase.c
index 5b687b7..4c81bef 100644
--- a/Modules/_io/iobase.c
+++ b/Modules/_io/iobase.c
@@ -34,8 +34,7 @@ typedef struct {
 } iobase;
 
 PyDoc_STRVAR(iobase_doc,
-    "The abstract base class for all I/O classes, acting on streams of\n"
-    "bytes. There is no public constructor.\n"
+    "The abstract base class for all I/O classes.\n"
     "\n"
     "This class provides dummy implementations for many methods that\n"
     "derived classes can override selectively; the default implementations\n"
diff --git a/Modules/_io/textio.c b/Modules/_io/textio.c
index eb05ae1..e28dbaa 100644
--- a/Modules/_io/textio.c
+++ b/Modules/_io/textio.c
@@ -50,7 +50,7 @@ PyDoc_STRVAR(textiobase_doc,
     "\n"
     "This class provides a character and line based interface to stream\n"
     "I/O. There is no readinto method because Python's character strings\n"
-    "are immutable. There is no public constructor.\n"
+    "are immutable.\n"
     );
 
 static PyObject *