首页 文章

PYTHON3:如何使用稍后为函数注释定义的类型?

提问于
浏览
2

好吧问题是这样的:

class A():
    def foo() -> B:
        pass

class B():
    def bar() -> A:
        pass

这将引发NameError:未定义名称“B” .

所以为了类型检查,我不愿意改变 - > B到 - >“B” . 那么有什么解决方法吗?


为了进一步讨论,我真的看不出注释中的任何一点如“def foo(a:'x',b:5 6,c:list) - > max(2,9):”(IN PEP 3107) . 为什么地狱python威胁这些注释表达?

2 回答

  • 1

    我发现了一种解决方法,与c / c非常相似

    在Pycharm 3中测试过

    class A: pass
    class B: pass
    
    class A(object):
    
        def foo(self, b: B) -> B:
    
            #CAN auto complete
            b.bar()
    
            return B()
    
    class B(object):
    
        def bar(self) -> A:
    
            return A()
    
    #CAN auto complete
    A().foo(B()).bar()
    
  • 0

    好吧,没有办法使用注释语法直接执行它,但可以修改函数对象的 __annotations__ 字典 .

    class A():
        def foo():
            pass
    
    class B():
        def bar() -> A:
            pass
    
    A.foo.__annotations__["return"] = B
    

相关问题