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

时间:2013-10-15 08:50:35

标签: python python-3.x annotations

问题是这样的:

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 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

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

class A():
    def foo():
        pass

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

A.foo.__annotations__["return"] = B