python - 为什么 isinstance 不能将 io.BytesIO 识别为 io.IOBase 的子类?
问题描述
编辑:这是我的错。正如@kevin-mayo 的回答中所建议的那样,我应该使用issubclass
而不是。isinstance
然后一切正常。
我最近偶然发现了 pycharm 类型提示的一种奇怪行为,这后来揭示了 python 本身的问题。我有一个采用流的方法,所以我将类型设置为io.BaseIO
. 但是,当我将 a 传递BytesIO
给它时,它给了我一个警告。我检查了以下内容:
>>> io.BytesIO.__mro__
(<class '_io.BytesIO'>, <class '_io._BufferedIOBase'>, <class '_io._IOBase'>, <class 'object'>)
>>> isinstance(io.BytesIO, io.IOBase)
False
这与 Python 文档所说的相矛盾,所以我真的很困惑。
我正在使用 Python 3.7。
我意识到这样做的鸭子打字方式,但请记住,我不是在进行严格的类型检查,而是进行方便的类型提示。
解决方案
那是因为
isinstance(io.BytesIO, io.IOBase)
就是检查是否是类的实例,
您可能需要使用issubclass(io.BytesIO, io.IOBase)
来检查它们
推荐阅读
- gitlab - 如何在 Gitlab Ce 中的组之间移动项目
- xampp - 为什么 w3schools.org 会路由到我的本地主机?
- mysql - 如何在mysql表中搜索特定字符串
- css - 背景附件:固定;不适用于某些移动 Safari 浏览器
- python - 使用 df.to_string() 显示所有 DataFrame
- json - 如果字段带有特定的键值对,则提取该字段
- php - PHP - 获取在多个索引中具有值的键
- c# - 如何在WinForm中单击按钮的后台启动进程?
- javascript - 如何通过鼠标单击在法国 SVG 地图中显示部门名称?
- java - 最终用户使用 logcat 会看到什么日志?