3

那么问题是这样的:

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

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

这将引发 NameError: name 'B' is not defined。

所以为了类型检查,我不愿意把 -> B 改成 -> "B"。那么有什么解决方法吗?


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

4

2 回答 2

2

我找到了一种解决方法,它与 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()
于 2013-10-17T12:25:59.083 回答
0

好吧,没有办法直接使用注释语法来做到这一点,但是可以修改__annotations__函数对象的字典。

class A():
    def foo():
        pass

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

A.foo.__annotations__["return"] = B
于 2013-10-16T14:34:54.297 回答