Python中的isinstance()函数
____函数使用方法、type() 与 isinstance()区别
目录
一、isinstance()函数使用方法
二、type() 与 isinstance()区别
零、时光宝盒🌻(https://blog.csdn.net/weixin_69553582 逆境清醒)
我昨天一直打字安慰某个被脑控的网友,她不懂科技,以为有魔,情绪不稳定,如果不及时拉回,有可能……,所以,时间拖延了,昨天晚上整晚没睡,今天早上4点多才完成在今日头条发布4篇新文章《软考高项常见英语词汇(1~4)》,是整理高项里常见的英语词汇,排序的,结果发布后,观察到依然被修改盗用,用什么名发布我看不见,但它们把文章中我的名字逆境清醒删除了。我在csdn的文章情况估计也是如此吧。
今天凌晨,我在csdn写好了同类型的“软考高项常见英语词汇”总结,还未发布,已经有黑进我电脑和偷我文章的了,从我开始写csdn,一直寄生于我,却只会豪取掠夺和压榨,利用我的文章抓人伤害人。
逆境清醒
20260131
返回《Python 全系列函数实例详解全集》主目录
一、isinstance()函数使用方法
在Python中,isinstance() 函数用于检查一个对象是否属于指定的类或类型。这个函数对于类型检查非常有用,尤其是在面向对象编程中,当需要确认对象是否为特定类或其子类的实例时。
isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type()。
定义与使用
如果指定的对象属于 指定类型,isinstance()True,否则 False
如果类型参数是元组,该函数将返回满足 对象是元组中的类型之一。True
语法
以下是 isinstance() 方法的语法:
isinstance(object, classinfo)
其中object是要检查的对象,classinfo可以是一个类名、数据类型或者由它们组成的元组。如果object是classinfo中的一个类型,则返回True,否则返回False。
参数值
| object | 实例对象。(要检查的对象。) |
| classinfo | 可以是直接或间接类名、基本类型或者由它们组成的元组。 |
对于基本类型来说 classinfo 可以是:
int,float,bool,complex,str(字符串),list,dict(字典),set,tuple
返回值
如果对象的类型与参数二的类型(classinfo)相同则返回 True,否则返回 False。
检查继承关系
isinstance() 会考虑类的继承关系。若对象是子类的实例,且 classinfo 指定为父类,返回 True。
class Parent: pass
class Child(Parent): pass
obj = Child()
print(isinstance(obj, Parent)) # 输出 True
实例1:检查基本数据类型
形式1:检查数字10是否为整数:
x = isinstance(10, int)
因为10是int整型,函数将会返回True.
形式2:如以下代码:
num = 10
print(isinstance(num, int)) # True
print(isinstance(num, str)) # False
运行结果:
True False
实例2:检查复合数据类型
njlist = [1,2,3,4,5]
print(isinstance(njlist, list)) # True
print(isinstance(njlist, tuple)) # False
运行结果:
True False
实例3:检查多个类型(1)
num = 10
print(isinstance(num, (int, float))) # True
运行结果:
True
实例4:检查多个类型(2)
str1 =isinstance("program",(int,float,str,list,dict,tuple))
print(str1)
运行结果:
True
实例5:检查多个类型(3)
通过元组传递多个类型,满足任意一个即返回 True:
data = [1, "hello", 3.14]
for item in data:
print(isinstance(item, (int, float))) # 分别输出 True、False、True
运行结果:
True False True
实例6:检查子类(1)
class fruit:
pass
class strawberry(fruit):
pass
Myfruit= strawberry()
print(isinstance(Myfruit, strawberry)) # True
print(isinstance(Myfruit, fruit)) # True
运行结果:
True True
实例7:检查子类(2)
检查是否是exprogram的实例:
class exprogram:
name ="Python"
str1 = exprogram()
print(isinstance(str1, exprogram))
运行结果:
True
1、在多重继承的情况下,因为一个对象可能属于多个类,isinstance()可能会产生意外的结果。
2、对于抽象基类,isinstance()会将其子类视为其父类的实例。
类型验证:确保函数参数符合预期类型。
def sqrt(x):
if not isinstance(x, (int, float)):
raise TypeError("x 必须是数字")
return x ** 0.5
多态处理:根据不同类型执行不同逻辑。
if isinstance(data, list):
process_list(data)
elif isinstance(data, dict):
process_dict(data)
二、type() 与 isinstance()区别
isinstance()函数和type()函数很类似。
但是两者又有区别,
2.1、基本概念区别
| isinstance() 与 type() 基本概念区别: | ||
| type()函数 | isinstance()函数 | |
| 子类、父类关系 | 不会认为子类是一种父类类型 | 会认为子类是一种父类类型 |
| 返回值 | 直接返回对象的类型 | 返回布尔值 |
| 继承关系 | 不考虑继承关系 |
考虑继承关系 支持多类型检查和继承判断。 |
|
type(10) 返回 <class 'int'>, 明确表示对象的类型是整数。 |
isinstance(10, int) 返回 True, 因为 10 是整数类型。 |
|
2.2、继承关系下的行为差异
print(type(obj) == Parent) # 输出 False
print(isinstance(obj, Parent)) # 输出 True
定义一个父类 A 和子类 B:
class A:
pass
class B(A):
pass
使用 type() 检查子类实例:
obj = B()
print(type(obj) == A) # 输出 False
使用 isinstance() 检查子类实例:
print(isinstance(obj, A)) # 输出 True
isinstance() 会沿着继承链向上检查,而 type() 仅匹配精确类型。
2.3、多类型检查的支持
isinstance() 支持传递一个类型元组,检查对象是否属于其中任一类型:
print(isinstance(10, (int, float))) # 输出 True
type() 无法直接实现多类型检查,需手动组合逻辑:
print(type(10) in (int, float)) # 输出 True
2.4、性能差异
type() 通常比 isinstance() 更快,因为后者需要遍历继承链。
在性能敏感的代码中,若无需考虑继承关系,优先使用 type()。
使用场景建议
- 当需要精确匹配类型且不关心继承关系时(如内置类型检查),使用 type()。
- 当需要处理自定义类继承或检查多种类型时,使用 isinstance()。
- 在类型检查之外,isinstance() 更符合 Python 的鸭子类型哲学。
如果要判断两个类型是否相同推荐使用 isinstance()。
两个函数区别的示例:
class A:
pass
class B(A):
pass
isinstance(A(), A) # returns True
type(A()) == A # returns True
isinstance(B(), A) # returns True
type(B()) == A # returns False
注意事项
- 避免滥用 isinstance(),过度类型检查可能违反 Python 的鸭子类型原则。
- 对抽象基类(如 collections.abc.Iterable)的检查更推荐使用 isinstance() 而非具体类型。
返回《Python 全系列函数实例详解全集》主目录
推荐阅读:
逆境清醒文章总目录表
|
|
|
|
| 给照片换底色(python+opencv) | 猫十二分类 | 基于大模型的虚拟数字人__虚拟主播实例 |
|
|
|
|
| 计算机视觉__基本图像操作(显示、读取、保存) | 直方图(颜色直方图、灰度直方图) | 直方图均衡化(调节图像亮度、对比度) |
|
|
|
|
|
语音识别实战(python代码)(一) |
人工智能基础篇 |
计算机视觉基础__图像特征 |
逆境清醒
|
|
||
|
matplotlib 自带绘图样式效果展示速查(28种,全) |
||
|
|
||
| Three.js实例详解___旋转的精灵女孩(附完整代码和资源)(一) | ||
|
|
|
|
| 立体多层玫瑰绘图源码__玫瑰花python 绘图源码集锦 |
Python 3D可视化(一) |
让你的作品更出色——词云Word Cloud的制作方法(基于python,WordCloud,stylecloud) |
|
|
|
|
|
python Format()函数的用法___实例详解(一)(全,例多)___各种格式化替换,format对齐打印 |
用代码写出浪漫__合集(python、matplotlib、Matlab、java绘制爱心、玫瑰花、前端特效玫瑰、爱心) |
python爱心源代码集锦(18款) |
|
|
|
|
|
Python中Print()函数的用法___实例详解(全,例多) |
Python函数方法实例详解全集(更新中…) |
《 Python List 列表全实例详解系列(一)》__系列总目录、列表概念 |
|
|
|
|
| 用代码过中秋,python海龟月饼你要不要尝一口? |
python练习题目录 |
|
|
|
|
|
| 草莓熊python turtle绘图(风车版)附源代码 |
草莓熊python turtle绘图代码(玫瑰花版)附源代码 |
草莓熊python绘图(春节版,圣诞倒数雪花版)附源代码 |
|
|
|
|
|
巴斯光年python turtle绘图__附源代码 |
皮卡丘python turtle海龟绘图(电力球版)附源代码 | |
|
|
|
|
|
Node.js (v19.1.0npm 8.19.3) vue.js安装配置教程(超详细) |
色彩颜色对照表(一)(16进制、RGB、CMYK、HSV、中英文名) |
2026年1月头条:三年内第二次,C# 被 TIOBE 指数评为年度编程语言。多家权威机构编程语言排行榜__薪酬状况 |
|
|
|
|
|
手机屏幕坏了____怎么把里面的资料导出(18种方法) |
【CSDN云IDE】个人使用体验和建议(含超详细操作教程)(python、webGL方向) |
查看jdk安装路径,在windows上实现多个java jdk的共存解决办法,安装java19后终端乱码的解决 |
|
|
||
| vue3 项目搭建教程(基于create-vue,vite,Vite + Vue) | ||
|
|
|
|
| 2023年春节祝福第二弹——送你一只守护兔,让它温暖每一个你【html5 css3】画会动的小兔子,炫酷充电,字体特 |
别具一格,原创唯美浪漫情人节表白专辑,(复制就可用)(html5,css3,svg)表白爱心代码(4套) |
SVG实例详解系列(一)(svg概述、位图和矢量图区别(图解)、SVG应用实例) |
|
|
|
|
| 【程序人生】卡塔尔世界杯元素python海龟绘图(附源代码),世界杯主题前端特效5个(附源码) | HTML+CSS+svg绘制精美彩色闪灯圣诞树,HTML+CSS+Js实时新年时间倒数倒计时(附源代码) |
2023春节祝福系列第一弹(上)(放飞祈福孔明灯,祝福大家身体健康)(附完整源代码及资源免费下载) |
|
|
|
|
|
tomcat11、tomcat10 安装配置(Windows环境)(详细图文) |
Tomcat端口配置(详细) |
Tomcat 启动闪退问题解决集(八大类详细) |
逆境清醒
信息系统项目管理师专题





