python 键入:是否可以在创建变量之后指定变量的类型?

python typing: Is it possible to specify the type of a variable later than at its creation?

我知道当它们作为函数参数传递时(下面的: Header)或者当它们被创建时(使用# type:指令)可以指定变量类型。

但是是否可以在代码中间(通常在 if 块内)指定变量的预期类型?

例如在下面的函数中,我想指定我的变量是 Header 的特定子类以避免 PyCharm 警告 "Unresolved attribute reference 'unit' for class 'Header'":

def change_header(old_header: Header, new_header: Header)
    if old_header.is_measure:
        # I would like to specify here that both old_header and 
        # new_header are of the subclass MeasureHeader and therefore have              
        # a 'unit' property
        if new_header.unit != old_header.unit:
            raise Exception("flag 'all' can't change the unit"

谢谢。

PyCharm 将识别 isinstance 检查:

def change_header(old_header: Header, new_header: Header)
    if isinstance(old_header, MeasureHeader) and \
            isinstance(new_header, MeasureHeader):
        ...

您也可以在 isinstance 中穿插 assertPyCharm help.

中列出了其他可能性

最后,您可以更严格地遵守您自己的类型提示,实际上只坚持您在函数签名中声明的类型,在这种情况下,这可能意味着扩大类型提示:

from typing import Union

def change_header(old_header: Union[Header, MeasureHeader], ...):