Python 新手,来自静态类型语言背景。我想要 https://lxml.de 的类型提示只是为了便于开发(mypy 标记问题和建议方法会很好!)
据我所知,这是一个 python 2.0 模块,没有类型。目前我已经使用 https://mypy.readthedocs.io/en/stable/stubgen.html 创建存根类型定义并填写我正在使用的“任何”类型以及更多信息,但它是 really哈克。有没有更安全的方法来获取类型提示?
现在有一个
lxml
的官方存根包,现在称为lxml-stubs
:
$ pip install lxml-stubs
但是请注意,存根仍在开发中,尚未 100% 完成(尽管根据我的经验非常有用)。这些存根曾经是
typeshed
的一部分,然后在删除后由 Jelle Zijlstra 策划,现在作为 lxml
项目的一部分进行开发。
如果你想要存根的开发版本,通过安装
$ pip install git+https://github.com/lxml/lxml-stubs.git
(该项目的自述安装命令在 URL 的方案中缺少
git+
前缀,将无法工作)。
欢迎 check out types-lxml 如果任何后来者仍然感兴趣。这些年来我做了很多填补空白的工作,所以现在可以认为所有主要子模块都已完成:
lxml.etree
、lxml.html
和 lxml.objectify
。 2023 年 3 月之后的下一个版本应该涵盖除 lxml.isoschematron
之外的所有内容,它具有非常强大的模式验证,但很少有人会使用它。
我已经使用
创建存根类型定义并填写“任何”类型stubgen
如果不是lxml,这实际上是正确的做法;从
mypy
创建模板 stubgen
是许多存根文件的起点。但是lxml主要是用Cython写的,stubgen目前还没有完善的支持。此外,正如 OP 所指出的,这是一个 python 2.0 时代的模块,作者以一种非常多态的方式使用函数参数。注释 lxml 有很多独特的挑战,因为 lxml 本质上是 libxml
和 libxslt
的 python 接口。
例如,
unicode
和bytes
输入的支持也使事情复杂化;这与注释与 python 捆绑在一起的 xml.etree
时发现的困难相同,但幅度要大得多。
[免责声明:我是上述
types-lxml
包的维护者]
我不会称之为“hacky”,而是gradual typing.
您可以仔细查看 lxml-stubs 存储库。来自:
此存储库包含 lxml 包的外部类型注释(参见 PEP 484)。此类类型注释通常包含在 typeshed 中,但 lxml 的注释经常出现问题,因此已从 typeshed 中删除。特别是存根不完整,很难提供完整的存根。
也许对你有用