如何判断"类型提示中前向引用的类定义是"到狮身人面像?

时间:2017-03-08 07:22:27

标签: python python-3.x python-sphinx

如何告诉"类型提示中前向引用的类定义是"到狮身人面像?
如何避免丢失参数(在Sphinx文档中),其类型由类型提示的前向引用定义?

我使用sphinx-apidoc编写我的Python程序的文档 我使用PEP 484中定义的类型提示的前向引用,如下所示:

# In file A/A.py

class A:
    def a(self, param: 'MyClass') -> None:
        """docstring here"""
        pass

未导入MyClass以避免循环导入。当然,程序运行正常,因为在运行时会忽略类型提示。

当我运行sphinx-apidoc并生成html时,会出现以下警告(名称' MyClass'未定义)。

$ sphinx-apidoc -f -o doc .
Creating file doc/A.rst
$ make html
...
reading sources... [100%] main
path/to/A/A.rst:XX: WARNING: error while formatting arguments for A.A.a: name 'MyClass' is not defined
looking for now-outdated files... none found
...
build succeeded, 1 warnings.

Build finished. The HTML pages are in _build/html.

在生成的html中,方法' a'没有这样的参数:

A module

class A

    a() -> None
       docstring here

在导入MyClass(没有循环导入)的上下文中,生成的html具有如下参数:

A module

class A

    a(param: MyClass) -> None
       docstring here

我的环境:

$ python3 --version
Python 3.5.2
$ pip3 --version
pip 8.1.1 from /usr/lib/python3/dist-packages (python 3.5)
$ pip3 freeze | grep Sphinx
You are using pip version 8.1.1, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Sphinx==1.5.2

1 个答案:

答案 0 :(得分:0)

根据sphinx问题跟踪器,他们在sphinx 1.6上解决这个问题。也许试试那个版本。我从不这么做,这只是一个建议。