我有一个带有签名的方法,如下所示:
def get_users_for_survey(survey_id: (int, str),show_deleted_users: bool = False) -> list:
pass
Run Code Online (Sandbox Code Playgroud)
我避开了方法主体,因为我只对survey_id 的类型提示部分感兴趣?看起来这意味着它可以是 int 或 str。我想如果这是意图,那么它应该是survey_id:Union(int,str)。PyCharm 不反对。你认为我错过了 PEP 484 中的某些内容吗?我不认为它是一个元组。
编辑根据此处提供的答案,这只是一个错误。现在我知道这个错误的根源是什么。在同样的方法下一行是:
if survey_id and isinstance(survey_id, (int, str)):
Run Code Online (Sandbox Code Playgroud)
所以你在 isinstance 中看到,如果你想适应多种类型,这是一个有效的语法。这个方法的作者认为这也是一个有效的类型提示语法。这里是一个参考: Python isinstance with multiple types
是的,你是对的,这不是有效的 TypeHint 语法,根据PEP484 的有效类型提示语法是
from typing import Union
def get_users_for_survey(survey_id: Union[int, str],show_deleted_users: bool = False) -> list:
pass
Run Code Online (Sandbox Code Playgroud)
这意味着Survey_id 的类型可以是int 或 str。
您问的第二个问题是“为什么 PyCharm 不抱怨它?”
答:
PyCharm 将其视为None类型,而不是将其视为无效的 TypeHint ,这相当于 TypeHint Any意味着它可以是任何类型。
即使您使用此语法作为类型提示(根本无效)
def get_users_for_survey(survey_id: int or str, show_deleted_users: bool = False) -> list:
pass
Run Code Online (Sandbox Code Playgroud)
尽管如此,不会有警告或错误。
| 归档时间: |
|
| 查看次数: |
1302 次 |
| 最近记录: |