isinstance()判断一个对象是否为指定类型1. 基本概念2. 基本用法2.1 判断单个类型2.2 判断多个类型2.3 判断子类3. 实际应用3.1 类型检查和条件执行3.2 类型多态3.3 数据验证3.4 检查继承关系3.5 使用 isinstance() 避免类型错误4. 复杂场景中的应用4.1 检查对象的多种类型4.2 检查自定义类和子类4.3 结合 isinstance() 和 getattr()4.4 多层嵌套类型检查版权声明:
isinstance() 函数是 Python 内置的函数,用于判断一个对象是否为指定类型或指定类型的子类。其语法如下:
isinstance(object, classinfo)
object:表示要判断类型的对象。
classinfo:可以是单个类型或由多个类型组成的元组。如果 object 是其中任意一个类型或其子类的实例,则返回 True,否则返回 False。
1# 判断整数类型2print(isinstance(10, int)) # 输出:True3 4# 判断字符串类型5print(isinstance("hello", str)) # 输出:True6 7# 判断列表类型8print(isinstance([1, 2, 3], list)) # 输出:True9 10# 判断字典类型11print(isinstance({"key": "value"}, dict)) # 输出:True12 13# 判断自定义类类型14class MyClass:15 pass16 17obj = MyClass()18print(isinstance(obj, MyClass)) # 输出:True 可以使用元组传递多个类型,如果对象是其中任意一个类型的实例,则返回 True。
xxxxxxxxxx41# 判断对象是否为整数或字符串类型2print(isinstance(10, (int, str))) # 输出:True3print(isinstance("hello", (int, str))) # 输出:True4print(isinstance(3.14, (int, str))) # 输出:False isinstance() 可以用来判断一个对象是否为某个类型的子类的实例。
xxxxxxxxxx91class Animal:2 pass3 4class Dog(Animal):5 pass6 7dog = Dog()8print(isinstance(dog, Animal)) # 输出:True9print(isinstance(dog, Dog)) # 输出:True在处理函数参数 进行类型检查,确保参数或输入符合预期类型。
xxxxxxxxxx141def process_data(data):2 if isinstance(data, list):3 print("处理列表数据")4 elif isinstance(data, dict):5 print("处理字典数据")6 elif isinstance(data, str):7 print("处理字符串数据")8 else:9 print("未知数据类型")10 11process_data([1, 2, 3]) # 输出:处理列表数据12process_data({"key": "value"}) # 输出:处理字典数据13process_data("hello") # 输出:处理字符串数据14process_data(42) # 输出:未知数据类型 在实现多态行为时,使用 isinstance() 确定对象的类型,以便调用适当的方法。
xxxxxxxxxx241class Animal:2 def speak(self):3 pass4 5class Dog(Animal):6 def speak(self):7 print("Woof!")8 9class Cat(Animal):10 def speak(self):11 print("Meow!")12 13def make_sound(animal):14 if isinstance(animal, Dog):15 animal.speak()16 elif isinstance(animal, Cat):17 animal.speak()18 else:19 print("未知动物")20 21dog = Dog()22cat = Cat()23make_sound(dog) # 输出:Woof!24make_sound(cat) # 输出:Meow! 在数据处理和验证过程中,使用 isinstance() 检查数据类型,确保数据符合预期格式。
xxxxxxxxxx81def validate_data(data):2 if not isinstance(data, (int, float)):3 raise ValueError("数据类型必须为整数或浮点数")4 print("数据有效")5 6validate_data(42) # 输出:数据有效7validate_data(3.14) # 输出:数据有效8validate_data("hello") # 抛出异常:ValueError: 数据类型必须为整数或浮点数 在面向对象编程中,使用 isinstance() 检查对象是否是某个类的实例或其子类的实例,以确保对象符合预期的继承关系。
xxxxxxxxxx201class Shape:2 pass3 4class Circle(Shape):5 pass6 7class Square(Shape):8 pass9 10def check_shape(shape):11 if isinstance(shape, Shape):12 print("是一个形状对象")13 else:14 print("不是一个形状对象")15 16circle = Circle()17square = Square()18check_shape(circle) # 输出:是一个形状对象19check_shape(square) # 输出:是一个形状对象20check_shape(42) # 输出:不是一个形状对象isinstance() 避免类型错误 在处理涉及多种类型的复杂逻辑时,使用 isinstance() 可以有效避免类型错误,提高代码的健壮性。
xxxxxxxxxx81def add(a, b):2 if not isinstance(a, (int, float)) or not isinstance(b, (int, float)):3 raise TypeError("参数必须为数字类型")4 return a + b5 6print(add(3, 4)) # 输出:77print(add(3.5, 2.5)) # 输出:6.08print(add(3, "4")) # 抛出异常:TypeError: 参数必须为数字类型在一些复杂场景中,可能需要检查对象是否属于多种类型之一。
xxxxxxxxxx161def process_item(item):2 if isinstance(item, (int, float)):3 print(f"数值类型:{item}")4 elif isinstance(item, (list, tuple)):5 print(f"序列类型:{item}")6 elif isinstance(item, dict):7 print(f"字典类型:{item}")8 else:9 print(f"未知类型:{item}")10 11process_item(10) # 输出:数值类型:1012process_item(3.14) # 输出:数值类型:3.1413process_item([1, 2, 3]) # 输出:序列类型:[1, 2, 3]14process_item((4, 5, 6)) # 输出:序列类型:(4, 5, 6)15process_item({"a": 1}) # 输出:字典类型:{'a': 1}16process_item("hello") # 输出:未知类型:hello 在面向对象编程中,使用 isinstance() 来检查对象是否属于自定义类或其子类。
xxxxxxxxxx211class Vehicle:2 pass3 4class Car(Vehicle):5 pass6 7class Bike(Vehicle):8 pass9 10def check_vehicle(vehicle):11 if isinstance(vehicle, Vehicle):12 print("这是一个交通工具")13 if isinstance(vehicle, Car):14 print("这是一个汽车")15 if isinstance(vehicle, Bike):16 print("这是一个自行车")17 18car = Car()19bike = Bike()20check_vehicle(car) # 输出:这是一个交通工具 这是一个汽车21check_vehicle(bike) # 输出:这是一个交通工具 这是一个自行车isinstance() 和 getattr() 在动态属性访问时,结合 isinstance() 和 getattr() 使用,可以更灵活地处理对象属性。
xxxxxxxxxx161class Person:2 def __init__(self, name, age):3 self.name = name4 self.age = age5 6def print_attribute(obj, attr_name):7 if isinstance(obj, Person):8 attr_value = getattr(obj, attr_name, "属性不存在")9 print(f"{attr_name}: {attr_value}")10 else:11 print("对象不是Person类")12 13p = Person("Alice", 30)14print_attribute(p, "name") # 输出:name: Alice15print_attribute(p, "age") # 输出:age: 3016print_attribute(p, "height")# 输出:height: 属性不存在 在处理嵌套数据结构时,可以使用 isinstance() 进行多层类型检查。
xxxxxxxxxx171nested_dict = {2 "a": {"b": {"c": 42}}3}4 5def get_nested_value(d, keys):6 for key in keys:7 if isinstance(d, dict):8 d = d.get(key, "键不存在")9 else:10 return "不是一个字典"11 return d12 13keys = ["a", "b", "c"]14print(get_nested_value(nested_dict, keys)) # 输出:4215 16keys = ["a", "x", "c"]17print(get_nested_value(nested_dict, keys)) # 输出:键不存在
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_65190179/article/details/138498641