Cau*_*uly 7 python annotations python-3.x python-typing
问题是这样的:
class A():
def foo() -> B:
pass
class B():
def bar() -> A:
pass
Run Code Online (Sandbox Code Playgroud)
这将引发一个NameError: name 'B' is not defined.
为了进行类型检查,我不愿意更改-> B为-> "B". 有什么解决方法吗?
您可以将第一个引用作为字符串传递(Python 3.5+):
class A():
def foo() -> 'B':
pass
class B():
def bar() -> A:
pass
Run Code Online (Sandbox Code Playgroud)
它被称为“前向参考”,并在PEP484中进行了阐述。有关更多方法和详细信息,请参阅此答案。
我找到了一个解决方法,它与 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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1265 次 |
| 最近记录: |