首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >何时在Python类型提示中使用IO[str]/IO[bytes]和TextIO/BinaryIO?

何时在Python类型提示中使用IO[str]/IO[bytes]和TextIO/BinaryIO?
EN

Stack Overflow用户
提问于 2020-01-11 09:55:44
回答 1查看 4.5K关注 0票数 15

从文件中可以看出:

泛型类型IO[AnyStr]及其子类TextIO(IO[str])BinaryIO(IO[bytes])表示I/O流的类型,如open()返回的。 - Python:typing.IO

文档没有指定何时对对应方使用BinaryIO/TextIOIO[str]IO[bytes]

通过对Python源代码的简单检查,只有30次点击在搜索BinaryIO时找到,109次点击找到IO[bytes]

为了更好地与BinaryIO兼容,我试图从IO[bytes]切换到狮身人面像-autodoc-类型提示,但是切换打破了许多类型检查,因为像tempfile.NamedTemporaryFile这样的方法被键入为IO[bytes]而不是其他方法。

就设计而言,使用每种IO类型提示的正确情况是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-13 08:29:04

BinaryIOTextIO分别直接子类IO[bytes]IO[str],并添加了一些额外的方法--详细信息见已键入的定义

因此,如果需要这些额外的方法,请使用BinaryIO/TextIO。否则,最好使用IO[...]来获得最大的灵活性。例如,如果您将一个方法注释为接受一个IO[str],那么最终用户提供该对象的一个实例就会容易一些。

尽管如此,IO类目前还有点混乱:它们定义了许多并非所有函数实际上都需要的方法。因此,类型化的维护人员实际上正在考虑将IO类分解为较小的协议。如果你愿意的话,也许你也可以这么做。如果您想要定义自己的IO类,但不想承担实现完整的typing.IO[...] API的负担,这种方法非常有用,或者如果您使用的类类似于IO,但不完全是IO类。

尽管如此,这三种方法--使用BinaryIO/TextIOIO[...]或定义更紧凑的自定义协议--都是完全有效的。如果斯芬克斯的扩展由于某种原因似乎无法处理一种特定的方法,那么这可能是它们的一个错误。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59693359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档