一尘不染

将当前类作为返回类型注释

python

在python 3中,我可以设置参数并返回类型注释。例:

class Graph:
    def __init__(self, V: int, E: int, edges: list):
        pass

    @classmethod
    def fromfile(cls, readobj: type(sys.stdin)):
        pass

    def V(self) -> int:
        pass

    def E(self) -> int:
        pass

问题是我无法使用当前类(图形)的返回类型进行注释,该类型尚未定义。例:

class Graph:
   def reverse(self) -> Graph:
       pass

这段代码有错误

def reverse(self) -> Graph:
NameError: name 'Graph' is not defined

这些注释对于记录文档以及允许IDE识别参数和返回类型都非常有用=>启用自动完成功能

UPD:所以我想到的是这是不可能的,或者需要一些我不喜欢的技巧,所以我决定使用def reverse (self) -> 'Graph':
可以理解的文档,尽管这违反了规则。缺点是它不适用于IDE自动完成功能。


阅读 119

收藏
2020-12-20

共1个答案

一尘不染

所以现在过了一会儿,我可以说我做出的决定是使用-> 'Graph'而不是-> Graph。它不能使我的IDE(PyCharm)能够以这种方式识别类型,但对于文档目的它已经足够好了。

我可以使用的另一种可能的解决方案是在运行时更改批注,但这不能解决文档问题-您将不想在源中间寻找类型声明…

问题的根源在于在实际定义类之前识别类对象。这在python中根本不可能做到。

2020-12-20