一、引言
在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 image
except 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:
pass
class Son(Father):
pass
d = Son()
print(isinstance(d, Son))
# 输出 True,因为 d 是 Son 的实例
print(isinstance(d, Father))
# 输出 True,因为 (d)Son 是 Father 的子类