【问题标题】:python function annotation in class return type is the class raise undefined类返回类型中的python函数注释是类raise undefined
【发布时间】:2017-05-10 03:23:43
【问题描述】:

Python 3.6.1,有几种类型提示方式,在文档字符串或注释中。如何使用注释来实现这一点?

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

class Foo:

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

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

我知道原因,因为python在加载Foo的load的函数签名时,Foo类的定义还没有完成,所以Foo还没有定义。

这是函数注解的缺点吗?我可以找到一些方法来实现这个目标,而不是使用文档字符串来输入提示,因为我真的很喜欢函数注释的清晰性。

【问题讨论】:

    标签: python annotations python-3.6


    【解决方案1】:

    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'>}
    

    【讨论】:

      猜你喜欢
      • 2018-12-15
      • 2022-11-15
      • 2021-06-05
      • 2016-09-10
      • 2019-02-15
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      相关资源
      最近更新 更多