类型提示中的类型别名不会被保留

问题描述 投票:0回答:3

我的代码(本演示减少到几行)如下所示:

AgentAssignment = List[int]

def assignment2str(assignment: AgentAssignment):    
    pass

生成的 html 文档有

List[int]
作为类型提示。这似乎是一个已解决的问题 (#6518),但我在 2022 年使用 Sphinx 版本 5.1.1(和 Python 3.8.2)时仍然遇到这个问题。我错过了什么?

python-sphinx python-typing
3个回答
4
投票

因此,需要在文件的开头添加(是的,在所有其他导入之前):

from __future__ import annotations

然后在conf.py中:

autodoc_type_aliases = {'AgentAssignment': 'AgentAssignment'}

这本身份转换字典对我来说没有任何意义,但它确实起到了作用......


0
投票

我不确定 Sphinx 是否支持此功能,但您需要使用 Python 3.10 中引入的显式 PEP 613 TypeAlias 。因为否则类型解析器无法区分普通变量赋值和类型别名。这是一个通用的 Python 解决方案,用于解决超出 Sphinx 范围的类型别名问题。

AgentAssignment: TypeAlias = List[int]

诗。我对 Sphinx 也有同样的问题


0
投票

我也遇到了这个问题,并且非常困惑为什么这里接受的答案stackoverflow.com/a/73273330/1822018,其中提到将类型别名添加到 autodoc_type_aliases 字典中,如此处文档中所述https://www. sphinx-doc.org/en/master/usage/extensions/autodoc.html#confval-autodoc_type_aliases 不适合我。我解决了我的问题,我将其发布在这里是为了其他人的利益。

就我而言,我还安装了 Python 包

sphinx-autodoc-typehints
,它扩展/劫持/覆盖某些 Sphinx 功能,特别是它似乎取代了给定 PR 中 autodoc_type_aliases 字典的功能。对于任何尝试调试此问题的人,我建议从 Sphinx conf.py 文件的扩展列表中删除“sphinx_autodoc_typehints”。

© www.soinside.com 2019 - 2024. All rights reserved.