我想有一个引用自己的类型:
SelfReferenceType = Dict[str, Union[str, 'SelfReferenceType']]
使用python 3.5和最新的mypy,我得到:
test.py:1: error: Invalid type "test.SelfReferenceType"
是否有简单的方法来做到这一点?我猜向前引用只支持类,不支持别名。
下面是我要做的:
SelfReferenceType = Dict[str, Union[str, 'SelfReferenceType']]
class Foo(object):
def __init__(self):
self.data = {} # type: SelfReferenceType
# Functions that work on self.data
我认为你的例子是正确的,并在较新的Python版本中工作:
SelfReferenceType = Dict[str, Union[str, 'SelfReferenceType']]
我用3.10.6测试,没有得到任何错误。这个问题似乎已经解决了。
对于循环或"forward"参考文献是正确的方法,如https://peps.python.org/pep-0484/#forward-references和Guido的评论所述。具体来说,我找不到任何关于类型别名遵循这种模式的信息,但我看不出有什么理由会有不同。
如果没有足够新版本的mypy(包括此PR,并且可能启用了标志),这样的引用也可能不起作用。