Phi*_*nin 3 python types python-3.x
类型/提示/分配的新方法很酷,但我不知道如何使这么简单的事情起作用:
class MyContainer:
def addMyItem(self, item:MyItem):
pass
class MyItem:
def __init__(self, container:MyContainer):
pass
Run Code Online (Sandbox Code Playgroud)
它抛出一个错误:Using variable 'MyItem' before assignment.到目前为止我发现的最好但超级丑陋的解决方法是:
class MyContainer:
def addMyItem(self, untypeditem):
item:MyItem=untypeditem
pass
class MyItem:
def __init__(self, container:MyContainer):
pass
Run Code Online (Sandbox Code Playgroud)
请告诉我,#1原则的语言可以Beautiful is better than ugly更好地解决这个常见的打字问题
前向引用只是引用名称的字符串(因为它在模块中可见).
class MyContainer:
def addMyItem(self, item: 'MyItem'):
pass
class MyItem:
def __init__(self, container: 'MyContainer'):
pass
Run Code Online (Sandbox Code Playgroud)
如果您需要从其他地方导入名称(并且您只需要用于类型检查的名称,或者它可能导致循环导入),您可以使用
import typing
if typing.TYPE_CHECKING:
from foo import Thing
Run Code Online (Sandbox Code Playgroud)
TYPE_CHECKING 仅当类型检查器正在运行时才会成立(即您的代码未被评估执行).