Python isinstance() 函数
isinstance() 是 Python 中用于检查对象是否为指定类型(或类型元组中任意一个类型)实例的内置函数。
isinstance() 是 Python 中最常用的类型检查函数,它不仅检查精确类型,还会考虑继承关系(子类也是父类的实例)。
单词释义: isinstance 是 is an instance(是一个实例)的缩写。
基本语法与参数
语法格式
isinstance(object, classinfo)
参数说明
- 参数 object:
- 类型: 任意对象
- 描述: 要检查的对象。
- 参数 classinfo:
- 类型: 类型、类型元组、或抽象基类
- 描述: 要检查的类型。可以是单个类型,也可以是类型元组。
函数说明
- 返回值: 返回布尔值
True或False。 - 特点: 如果 object 是 classinfo 的子类实例,也返回 True。
实例
示例 1:基础用法
实例
# 检查基本类型
print(isinstance(123, int)) # 输出: True
print(isinstance(3.14, float)) # 输出: True
print(isinstance("hello", str)) # 输出: True
print(isinstance([1, 2], list)) # 输出: True
print(isinstance({"a": 1}, dict)) # 输出: True
# 检查 None
print(isinstance(None, type(None))) # 输出: True
# 检查布尔值(注意:bool 是 int 的子类)
print(isinstance(True, bool)) # 输出: True
print(isinstance(True, int)) # 输出: True(因为 bool 继承自 int)
print(isinstance(123, int)) # 输出: True
print(isinstance(3.14, float)) # 输出: True
print(isinstance("hello", str)) # 输出: True
print(isinstance([1, 2], list)) # 输出: True
print(isinstance({"a": 1}, dict)) # 输出: True
# 检查 None
print(isinstance(None, type(None))) # 输出: True
# 检查布尔值(注意:bool 是 int 的子类)
print(isinstance(True, bool)) # 输出: True
print(isinstance(True, int)) # 输出: True(因为 bool 继承自 int)
运行结果预期:
True True True True True True True True
代码解析:
- 可以检查各种基本类型。
- bool 是 int 的子类,所以 True/False 也是 int 的实例。
示例 2:使用类型元组
实例
# 检查多种类型(使用元组)
value = 42
print(isinstance(value, (int, float))) # 输出: True
print(isinstance(value, (str, list))) # 输出: False
# 检查多种类型混合
value = "hello"
print(isinstance(value, (int, str, bytes))) # 输出: True
# 用于条件判断
def process_data(data):
if isinstance(data, (list, tuple)):
return sum(data)
elif isinstance(data, (int, float)):
return data * 2
else:
return str(data)
print(process_data([1, 2, 3])) # 输出: 6
print(process_data((1, 2, 3))) # 输出: 6
print(process_data(10)) # 输出: 20
print(process_data(3.14)) # 输出: 6.28
print(process_data("hello")) # 输出: hello
value = 42
print(isinstance(value, (int, float))) # 输出: True
print(isinstance(value, (str, list))) # 输出: False
# 检查多种类型混合
value = "hello"
print(isinstance(value, (int, str, bytes))) # 输出: True
# 用于条件判断
def process_data(data):
if isinstance(data, (list, tuple)):
return sum(data)
elif isinstance(data, (int, float)):
return data * 2
else:
return str(data)
print(process_data([1, 2, 3])) # 输出: 6
print(process_data((1, 2, 3))) # 输出: 6
print(process_data(10)) # 输出: 20
print(process_data(3.14)) # 输出: 6.28
print(process_data("hello")) # 输出: hello
运行结果预期:
True False True 6 6 20 6.28 hello
代码解析:
- 第二个参数可以是类型元组,同时检查多种类型。
- 这在处理多种数据类型时非常方便。
示例 3:与类继承
实例
# 类继承示例
class Animal:
pass
class Dog(Animal):
pass
class Cat(Animal):
pass
# 创建实例
dog = Dog()
cat = Cat()
animal = Animal()
# isinstance 会考虑继承关系
print(isinstance(dog, Dog)) # 输出: True
print(isinstance(dog, Animal)) # 输出: True(子类实例也是父类实例)
print(isinstance(dog, Cat)) # 输出: False
print(isinstance(cat, Animal)) # 输出: True
print(isinstance(animal, Dog)) # 输出: False
class Animal:
pass
class Dog(Animal):
pass
class Cat(Animal):
pass
# 创建实例
dog = Dog()
cat = Cat()
animal = Animal()
# isinstance 会考虑继承关系
print(isinstance(dog, Dog)) # 输出: True
print(isinstance(dog, Animal)) # 输出: True(子类实例也是父类实例)
print(isinstance(dog, Cat)) # 输出: False
print(isinstance(cat, Animal)) # 输出: True
print(isinstance(animal, Dog)) # 输出: False
运行结果预期:
True True False True False
isinstance() 会检查继承链,所以子类实例也属于父类的实例。
Python3 内置函数
点我分享笔记