我知道当它们作为函数参数(下面的: 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"
感谢。
答案 0 :(得分:1)
PyCharm将识别isinstance
支票:
def change_header(old_header: Header, new_header: Header)
if isinstance(old_header, MeasureHeader) and \
isinstance(new_header, MeasureHeader):
...
您还可以将isinstance
与assert
散布在一起。其他可能性列在PyCharm help。
最后,你可以更接近地尊重你自己的类型提示,并且实际上只坚持你在函数签名中声明的类型,在这种情况下可能意味着扩大类型提示:
from typing import Union
def change_header(old_header: Union[Header, MeasureHeader], ...):