bpo-43680: _pyio.open() becomes a static method (GH-25354)

The Python _pyio.open() function becomes a static method to behave as
io.open() built-in function: don't become a bound method when stored
as a class variable. It becomes possible since static methods are now
callable in Python 3.10. Moreover, _pyio.OpenWrapper becomes a simple
alias to _pyio.open.

init_set_builtins_open() now sets builtins.open to io.open, rather
than setting it to io.OpenWrapper, since OpenWrapper is now an alias
to open in the io and _pyio modules.
This commit is contained in:
Victor Stinner 2021-04-12 10:44:53 +02:00 committed by GitHub
parent 9825bdfbd5
commit 77d668b122
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 14 deletions

View file

@ -2241,7 +2241,7 @@ error:
return NULL;
}
/* Set builtins.open to io.OpenWrapper */
/* Set builtins.open to io.open */
static PyStatus
init_set_builtins_open(void)
{
@ -2257,7 +2257,7 @@ init_set_builtins_open(void)
goto error;
}
if (!(wrapper = PyObject_GetAttrString(iomod, "OpenWrapper"))) {
if (!(wrapper = PyObject_GetAttrString(iomod, "open"))) {
goto error;
}
@ -2279,7 +2279,7 @@ done:
}
/* Initialize sys.stdin, stdout, stderr and builtins.open */
/* Create sys.stdin, sys.stdout and sys.stderr */
static PyStatus
init_sys_streams(PyThreadState *tstate)
{