如何判断哪种类型的注释支持iter__

2024-06-16 15:08:02 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我解析Python文件的ast并看到一个变量有一个类型注释,例如Mapping,我如何判断该注释是否支持__iter__

一种选择是查看https://mypy.readthedocs.io/en/stable/protocols.html,列出所有支持__iter__的内容(例如IterableIteratorCollection,…),并检查给定变量的注释是否在该列表中

但是,这感觉很脆弱——有更好的方法吗?我只需要从变量的ast解析变量的注释就可以做到这一点——在变量上运行iter不是一个选项


Tags: 文件httpsio类型内容htmlreadthedocsast
1条回答
网友
1楼 · 发布于 2024-06-16 15:08:02

最简单的方法是解析给定注释的FQN,然后检索它所属模块的存根(例如,从typeshed中typing.pyi),然后递归地取消类实现的所有方法,并检查它是否实现了您希望它执行的协议。显然,这是一个复杂的过程,因此,如果您想让东西变得更简单,而不是解析和部分计算模块存根,您可以尝试动态导入到模块,然后执行简单的issubclass检查

相关问题 更多 >