Python的isinstance()函数用于检查对象是否属于指定类型或类型元组,语法为isinstance(object, type)。
它支持基本类型(int, str等)和容器类型(list, dict等)检查,还能判断多个类型。
与type()不同,isinstance()考虑继承关系,子类会被识别为父类类型。
实际应用中可用于参数验证、数据处理等场景。
注意事项:判断None应使用x is None,布尔值是int子类。
True=》1,False=》0
相比type(),isinstance()更推荐使用,因其支持继承关系,更符合面向对象设计。
Python isinstance() 函数详解(附:与 type() 的区别)
isinstance()函数详解
isinstance()是 Python 的内置函数,用于判断一个对象是否属于某个指定的数据类型(或类型元组)。
基本语法
python
isinstance(object, type)
object:要判断的对象type:类型(可以是单个类型,也可以是类型的元组)返回值:
True或False
基本用法
python
# 判断整数 print(isinstance(10, int)) # True print(isinstance(10, str)) # False # 判断字符串 print(isinstance("hello", str)) # True # 判断列表 print(isinstance([1, 2, 3], list)) # True # 判断字典 print(isinstance({"a": 1}, dict)) # True判断多个类型
python
# 判断是否为整数或浮点数 num = 3.14 print(isinstance(num, (int, float))) # True # 判断是否为列表或元组 data = [1, 2, 3] print(isinstance(data, (list, tuple))) # True
与type()的区别
python
class Animal: pass class Dog(Animal): # Dog 继承 Animal pass dog = Dog() # type() 不认为子类是父类类型 print(type(dog) == Animal) # False print(type(dog) == Dog) # True # isinstance() 认为子类是父类类型 print(isinstance(dog, Animal)) # True print(isinstance(dog, Dog)) # True
实际应用场景
1.类型检查
python
def add(a, b): if isinstance(a, (int, float)) and isinstance(b, (int, float)): return a + b else: return "错误:参数必须是数字"
2.处理不同类型的数据
python
def process_data(data): if isinstance(data, list): return [x * 2 for x in data] elif isinstance(data, dict): return {k: v * 2 for k, v in data.items()} elif isinstance(data, (int, float)): return data * 2 else: return "不支持的数据类型"3.验证函数参数
python
def greet(name, age): if not isinstance(name, str): raise TypeError("name 必须是字符串") if not isinstance(age, int): raise TypeError("age 必须是整数") return f"{name} 今年 {age} 岁"常用类型检查
python
# 基本类型 isinstance(x, int) # 整数 isinstance(x, float) # 浮点数 isinstance(x, str) # 字符串 isinstance(x, bool) # 布尔值 isinstance(x, complex) # 复数 # 容器类型 isinstance(x, list) # 列表 isinstance(x, tuple) # 元组 isinstance(x, dict) # 字典 isinstance(x, set) # 集合 # 其他 isinstance(x, None) # 错误!应该用 x is None isinstance(x, type(None)) # 正确判断 None
注意事项
判断 None 要小心
python
x = None print(isinstance(x, type(None))) # True # 更推荐: print(x is None) # True
布尔值是 int 的子类
python
print(isinstance(True, int)) # True(布尔值是整数的子类) print(isinstance(True, bool)) # True
建议使用
isinstance()而非type()
isinstance()支持继承关系,更符合面向对象设计type()只判断精确类型,不考虑继承