mypy - невозможно использовать BufferedIOBase в сигнатуре типа - PullRequest
1 голос
/ 07 мая 2020

У меня есть следующий код

import io

def reader(byte_stream: io.BufferedIOBase):
    ...

reader(open("./README.md", "rb"))

Когда я запускаю этот файл через mypy, я получаю следующую ошибку типа:

subclass.py:6:8: error: Argument 1 to "reader" has incompatible type "BinaryIO"; expected "BufferedIOBase"  [arg-type]
    reader(open("./README.md", "rb"))
           ^
Found 1 error in 1 file (checked 1 source file)

Это не должно быть ошибкой , поскольку BinaryIO наследуется от BufferedIOBase, что я здесь проверил:

isinstance(open("./README.md", "rb"), io.BufferedIOBase)  # True

Итак, что не так с моей сигнатурой типа?

1 Ответ

0 голосов
/ 07 мая 2020

Я точно не знаю почему класс несовместим с подсказкой типа, но простое решение - использовать подсказку типа в вашей подписи. (Это даже задокументировано как представление типа значений, возвращаемых open.)

def reader(byte_stream: typing.BinaryIO):
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...