python类型:是否可以在创建变量时指定变量的类型?
我知道,当变量作为函数参数传递(下面的python类型:是否可以在创建变量时指定变量的类型?,python,typing,mypy,Python,Typing,Mypy,我知道,当变量作为函数参数传递(下面的:Header)或创建变量(使用#type:指令)时,可以指定变量类型 但是,是否可以在代码的中间指定(通常在如果块),变量的期望类型是什么? 例如,在下面的函数中,我想指定我的变量属于Header的特定子类,以避免PyCharm警告“类“Header”的未解析属性引用“unit”: 谢谢。PyCharm将识别isinstance检查: def change_header(old_header: Header, new_header: Header)
:Header
)或创建变量(使用#type:
指令)时,可以指定变量类型
<>但是,是否可以在代码的中间指定(通常在<代码>如果块),变量的期望类型是什么?
例如,在下面的函数中,我想指定我的变量属于Header
的特定子类,以避免PyCharm警告“类“Header”的未解析属性引用“unit”:
谢谢。PyCharm将识别
isinstance
检查:
def change_header(old_header: Header, new_header: Header)
if isinstance(old_header, MeasureHeader) and \
isinstance(new_header, MeasureHeader):
...
您还可以在这样的isinstance
中插入断言
。其他可能性在列表中列出
最后,您可以更严格地遵守自己的类型提示,并且实际上只坚持您在函数签名中声明的类型,在这种情况下,这可能意味着扩展类型提示:
from typing import Union
def change_header(old_header: Union[Header, MeasureHeader], ...):
PyCharm确实有一点:您指定要依赖
标题的类型规范,因此您应该只尝试使用标题中可用的内容。您真的应该修改您的类型提示来扩展它,可能是Union[Header,MeasureHeader]
。
from typing import Union
def change_header(old_header: Union[Header, MeasureHeader], ...):