问题是这样的:
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威胁这些注释表达?
答案 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