一、引言
在python中写函数或类时,为了提升方法的适用范围,也为了防止报错,对于某些输入参数的类型可能不是固定的,而是可以根据不同类型来做不同处理。
此时,就需要对输入的参数进行类型判断。python内置的 isinstance 函数就是一个常用的实现方法(虽然使用type()也可以实现某些情况,但是isinstance具有更强大的扩展功能)
二、使用
1.基本用法
isinstance接受两个参数输入,第一个是数据,第二个是判断的数据类型,返回的是一个bool数据——True or False。例如在一个处理图片的函数中,可以判断输入数据的格式是否满足要求。
def handle_input(input_data):# 判断是否为字符串类型,通常表示文件路径if isinstance(input_data, str):try:image = Image.open(input_data)print("输入的是图片路径,已成功加载图片")return imageexcept Exception as e:print(f"加载图片失败: {e}")return None# 判断是否为 PIL.Image.Image 类型,表示已加载的图片数据elif isinstance(input_data, Image.Image):print("输入的是已加载的图片数据")return input_data# 判断是否为列表类型elif isinstance(input_data, list):print("输入的是列表")# 可以在这里对列表内容进行进一步的操作return input_data# 判断是否为字典类型elif isinstance(input_data, dict):print("输入的是字典")# 可以在这里对字典内容进行进一步的操作return input_data# 如果输入类型不在上述范围内else:print("输入的类型不支持")return None
2.扩展用法
isinstance函数还可以对多个类型和自定义类进行检查判断。
对多个类型的判断只需在第二个参数数据类型输入元组结构即可。
x = 10.5
print(isinstance(x, (int, float)))
# 输出 True,因为 x 是 float 类型y = int(10)
print(isinstance(y, (int, float)))
# 输出 True,因为 y 是 int 类型
更强大的功能是,isinstance还可以用于检查子类关系,这是type()方法无法实现的。
class Father:passclass Son(Father):passd = Son()print(isinstance(d, Son))
# 输出 True,因为 d 是 Son 的实例print(isinstance(d, Father))
# 输出 True,因为 (d)Son 是 Father 的子类