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

时间:2017-06-22 12:56:41

标签: python typing mypy

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

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

例如,在下面的函数中,我想指定我的变量属于Header的特定子类,以避免PyCharm警告"未解析的属性引用' unit'课程' 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"

感谢。

1 个答案:

答案 0 :(得分:1)

PyCharm将识别isinstance支票:

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

您还可以将isinstanceassert散布在一起。其他可能性列在PyCharm help

最后,你可以更接近地尊重你自己的类型提示,并且实际上只坚持你在函数签名中声明的类型,在这种情况下可能意味着扩大类型提示:

from typing import Union

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