Почему io.BytesIO не является подклассом typing.BinaryIO, а io.StringIO не является подклассом typing.TextIO?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Почему io.BytesIO не является подклассом typing.BinaryIO, а io.StringIO не является подклассом typing.TextIO?

Сообщение Anonymous »

При использовании шаблона соответствия регистру я обнаружил, что регистр typeing.BinaryIO(): не может сопоставить объект с типом io.BytesIO.
Итак Я пробую это:

Код: Выделить всё

import io
import typing

assert issubclass(list, typing.Sequence)
assert issubclass(list, typing.List)
assert issubclass(dict, typing.Mapping)
assert issubclass(dict, typing.Dict)
# assert issubclass(io.StringIO, typing.TextIO) # failed!
# assert issubclass(io.BytesIO, typing.BinaryIO) # failed!

a = [1, 2, 3]
b = {"a": 1, "b": 2, "c": 3}
c = io.BytesIO(b"123123123")
d = io.StringIO("123123123")

assert isinstance(a, typing.List)
assert isinstance(a, typing.Sequence)
assert isinstance(b, typing.Dict)
assert isinstance(b, typing.Mapping)
# assert isinstance(c, typing.BinaryIO) # failed!
# assert isinstance(d, typing.TextIO) # failed!
Это показывает, что io.BytesIO и io.StringIO не являются подклассами typing.BinaryIO и typing.TextIO, которые на мой взгляд, это странно, поскольку официальные документы никогда не намекают мне, что нужно быть осторожным с таким поведением (или, по крайней мере, я никогда его не обнаруживал).
Что еще более странно, так это .pyi файл-заглушку, который я нашел, его путь: /data/users/XXXXXX/.vscode-server/extensions/ms-python.vscode-pylance-2024.11.1/dist/typeshed-fallback/stdlib/_io.pyi.
Я нашел в файле-заглушке следующую строку: class BytesIO(BufferedIOBase, _BufferedIOBase, BinaryIO):, которая подразумевает, что все должно быть так, как должно быть по моей интуиции.
Это намеренная задумка или ошибка? Если это дизайн, то почему?
Я использую Python 3.12.3 с mypy 1.13.0 под VSCode 1.93.1 с расширение pylance 2024.11.1.

Подробнее здесь: https://stackoverflow.com/questions/791 ... is-neither
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Когда использовать IO[str]/IO[bytes] и TextIO/BinaryIO в подсказках типов Python?
    Anonymous » » в форуме Python
    0 Ответы
    35 Просмотры
    Последнее сообщение Anonymous
  • Подсказки по типам Python: typing.Mapping и typing.Dict
    Anonymous » » в форуме Python
    0 Ответы
    28 Просмотры
    Последнее сообщение Anonymous
  • Подсказки по типам Python: typing.Mapping и typing.Dict
    Anonymous » » в форуме Python
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Подсказки по типам Python: typing.Mapping и typing.Dict
    Anonymous » » в форуме Python
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Как проверить аргумент TextIO?
    Anonymous » » в форуме Python
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»