类返回类型中的python函数注释是类raise raise undefined

时间:2017-05-10 03:23:43

标签: python annotations python-3.6

Python 3.6.1,在doc字符串或注释中有几种类型提示方式。如何使用注释实现此目的?

假设我有一个类,它有一个类方法load来从某个地方加载数据,例如json或数据库,并构造并返回这个类的实例。

class Foo:

    @classmethod
    def load(cls, bar) -> Foo:
        pass

我认为这很简单,但是python解释器引发了一个错误,即没有定义Foo。

我知道原因,因为当python加载Foo的load函数签名时,Foo类的定义没有完成,因此Foo尚未定义。

这是功能注释的缺点吗?我能找到一些方法来实现这个目标,而不是使用doc string来输入提示,因为我真的很喜欢函数注释的清晰度。

1 个答案:

答案 0 :(得分:7)

您可以为forward references使用字符串文字:

import typing


class Foo:

    @classmethod
    def load(cls, bar) -> 'Foo':
        pass


class Bar:

    @classmethod
    def load(cls, bar) -> Foo:
        pass


print(typing.get_type_hints(Foo.load))  # {'return': <class '__main__.Foo'>}
print(typing.get_type_hints(Bar.load))  # {'return': <class '__main__.Foo'>}