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], ...):