在python中,是否应该在类型注释周围加上引号

2021-05-13 13:38:09 发布

您现在位置:Python中文网/ 问答频道 /正文

这两个函数有什么区别?我见过有人在类型注释的周围加上引号,还有一些时候把它们漏掉了,但我不明白为什么人们会选择使用其中一个。在

def do_something(entity: Entity):
    pass
def do_something(entity: 'Entity'):
    pass

这些都有优点或缺点吗?在

1条回答
网友
1楼 ·

根据pep484,在类型提示后面加引号是在生成Forward Reference时有意义的事情。在这种情况下,在名称周围加引号是为了抑制可能发生的名称错误。在

在其他情况下,不要使用引号,这不会产生您想要的提示:

>>> def bad_foo(a: 'int'):
...     pass
>>> def good_foo(a: int):
...     pass
>>> bad_foo.__annotations__['a'] == good_foo.__annotations__['a']
False

虽然目前类型跳棋(mypy,至少)似乎没有区别对待这些问题,但我不确定未来是否会如此。最好是清楚,不要使用引号时,你实际上并不需要。在

相关问题