Итак Я пробую это:
Код: Выделить всё
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!
Что еще более странно, так это .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