1

我知道当它们作为函数参数传递(: 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"

谢谢。

4

1 回答 1

1

PyCharm 将识别isinstance支票:

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

您也可以将这样的 aisinstanceassert. PyCharm 帮助中列出了其他可能性。

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

from typing import Union

def change_header(old_header: Union[Header, MeasureHeader], ...):
于 2017-06-22T13:04:25.467 回答