我有以下代码
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
所以,我的类型签名有什么问题?
我不确定为什么该类与类型提示不兼容,但是简单的解决方法是在签名中使用类型提示。 (甚至记录为代表open
返回的值的类型。)
def reader(byte_stream: typing.BinaryIO):
...