mirror of
https://github.com/python/cpython.git
synced 2026-05-06 04:37:33 -04:00
gh-108411: Make typing.IO/BinaryIO arguments positional-only (#142906)
`IO` is purported to be the type of the file objects returned by `open`. However, all methods on those objects take positional-only arguments, while `IO`'s methods are declared with regular arguments. As such, the file objects cannot actually be considered to implement `IO`. The same thing applies to `BinaryIO`. Fix this by adjusting the definition of these ABCs to match the file objects. This is technically a breaking change, but it is unlikely to actually break anything: * These methods should never be called at runtime, since they are abstract. Therefore, this should not cause any runtime errors. * In typeshed these arguments are already positional-only, so this should not cause any errors during typechecking either.
This commit is contained in:
+9
-9
@@ -3612,7 +3612,7 @@ class IO(Generic[AnyStr]):
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def read(self, n: int = -1) -> AnyStr:
|
||||
def read(self, n: int = -1, /) -> AnyStr:
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
@@ -3620,15 +3620,15 @@ class IO(Generic[AnyStr]):
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def readline(self, limit: int = -1) -> AnyStr:
|
||||
def readline(self, limit: int = -1, /) -> AnyStr:
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def readlines(self, hint: int = -1) -> list[AnyStr]:
|
||||
def readlines(self, hint: int = -1, /) -> list[AnyStr]:
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def seek(self, offset: int, whence: int = 0) -> int:
|
||||
def seek(self, offset: int, whence: int = 0, /) -> int:
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
@@ -3640,7 +3640,7 @@ class IO(Generic[AnyStr]):
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def truncate(self, size: int | None = None) -> int:
|
||||
def truncate(self, size: int | None = None, /) -> int:
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
@@ -3648,11 +3648,11 @@ class IO(Generic[AnyStr]):
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def write(self, s: AnyStr) -> int:
|
||||
def write(self, s: AnyStr, /) -> int:
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def writelines(self, lines: list[AnyStr]) -> None:
|
||||
def writelines(self, lines: list[AnyStr], /) -> None:
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
@@ -3660,7 +3660,7 @@ class IO(Generic[AnyStr]):
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
def __exit__(self, type, value, traceback) -> None:
|
||||
def __exit__(self, type, value, traceback, /) -> None:
|
||||
pass
|
||||
|
||||
|
||||
@@ -3670,7 +3670,7 @@ class BinaryIO(IO[bytes]):
|
||||
__slots__ = ()
|
||||
|
||||
@abstractmethod
|
||||
def write(self, s: bytes | bytearray) -> int:
|
||||
def write(self, s: bytes | bytearray, /) -> int:
|
||||
pass
|
||||
|
||||
@abstractmethod
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
``typing.IO`` and ``typing.BinaryIO`` method arguments are now
|
||||
positional-only.
|
||||
Reference in New Issue
Block a user