跳转到主要内容

CLI工具,用于自动为Python代码添加类型注解。

项目描述

infer-types

一个CLI工具,用于自动将类型注解添加到Python代码中。

使用该工具的主要场景是帮助您为大型旧代码库添加注解。它不能100%解决您的任务,但肯定会极大地帮助您,因为现实世界中的许多函数都有相当简单的返回类型,这些类型很容易自动推断。

特性

  • 100%自动化,无需努力即可获得大量类型注解。
  • 100%静态,所有类型都是在不运行代码的情况下推断的。
  • 很多启发式和智能推断。
  • 积极使用 typeshed 来查找未注解依赖项的注解。

示例

假设,你有一个以下方法

class Database:
    def users_count(self):
        return len(self.users)

由于 len 总是返回 int,因此 infer-types 能够推断方法的返回类型。因此,在运行该工具后,代码将如下所示

class Database:
    def users_count(self) -> int:
        return len(self.users)

安装

python3 -m pip install infer-types

使用

python3 -m infer_types ./example/

该工具将添加新的导入语句,这些语句可以重复,并且位于文件顶部。要修复它,请运行 isort

python3 -m isort ./example/

infer-types 工具使用了 Python 3.10 中引入的新潮语法进行类型注解。因此,它将发出 str | None 而不是 Optional[str]。如果你的代码应该在较旧的 Python 版本上运行,请在每个文件的开始处添加 from __future__ import annotations。这将解决问题并使你的应用程序启动更快。你也可以使用 isort 来做到这一点。

python3 -m isort --add-import 'from __future__ import annotations' ./example/

有关更多帮助注解代码的工具,请参阅 awesome-python-typing

工作原理

  • 大部分启发式算法都在 astypes 包中。查看它以了解更多关于主要推理逻辑的信息。
  • 如果在基类中定义了相同的方法,则从那里复制类型注解。
  • 如果没有返回语句返回值,则返回类型为 None
  • 如果有 yield 语句,则返回类型为 typing.Iterator
  • 在某些情况下,可以根据函数名称猜测返回类型。例如,假设 is_open 函数返回 bool,因为它以 is_ 开头。

你可以使用 --only 标志只运行特定的启发式算法。

项目详情


下载文件

下载适用于您平台的自定义文件。如果您不确定选择哪个,请了解有关 安装软件包 的更多信息。

源分布

infer_types-1.0.0.tar.gz (14.6 kB 查看哈希值)

上传时间

构建分布

infer_types-1.0.0-py3-none-any.whl (11.2 kB 查看哈希值)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面