【python】type和isinstance的用法和区别

2024-05-25 23:18

本文主要是介绍【python】type和isinstance的用法和区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

引言

最近考试遇到这样一道考题:

class Ve:passclass Tu:passif __name__ == '__main__':print(type(Ve()) == Ve)print(type(Tu()) == Ve)print(isinstance(Ve(), Ve))print(isinstance(Tu(), Ve))

输出的结果是?

在python里,虽然经常使用type和isinstance,但要说两者之间的共同点和不同点,还真不是特别清楚,现在带着这个问题来看看isinstance和type的用法和区别。
在简书上看到一篇很棒的文章,python-isinstance和type的用法和区别

一、isinstance

在这里插入图片描述
1、作用:判断一个对象是否是某个类或子类的实例
2、第一个参数为对象(object),第二个参数为类型名(int…)或类型名的一个元组((int,list,float))。其返回值为布尔型(True or flase)
2.1、当第二个参数是type or tuple时
如果第二个参数是一个单独的类型,对象的类型与参数二的类型相同则返回True,反之则返回False
如果第二个参数是一个元组类型,对象的类型与元组中各个类型之一相同则返回True,如果跟元组中的所有类型都不相同则返回False

print(isinstance(4, int))
print(isinstance(4, str))
print(isinstance(4, (str, int, list)))
print(isinstance(4, (str, float, list)))输出:
True
False
True
False

2.2、当第二参数是class时

class A(object):passif __name__ == '__main__':a = A()print(isinstance(a, A))输出:
True

二、type

1、type(object),作用:得到传入的object的类型

三、共同点

type和isinstance都可以判断变量是否属于某个类型

四、不同点

1、type只有一个参数,不仅可以判断变量是否属于某个类型,还可以得到参数变量未知的所属类型;
isinstance只能判断是否属于某个已知类型,不能直接得到变量未知的所属类型

class A(object):passif __name__ == '__main__':a = A()# isinstance 只能判断变量是否属于某个类型print(isinstance(a, A))# type 判断变量是否属于某个类型print(type(a) == A)# type还能得到变量类型print(type(a))输出:
True
True
<class '__main__.A'>

2、isinstance可以判断子类实例对象是属于父类的,即 isinstance 判断子类实例【属于父类】
type会判断子类实例对象和父类类型不一样,即 type 判断子类实例【不属于父类】

class A(object):pass# B是A的子类
class B(A):passif __name__ == '__main__':a = A()b = B()print(isinstance(a, A))  # Trueprint(type(a) == A)  # True# isinstance 判断子类实例【属于父类】print(isinstance(b, A))  # True# type 判断子类实例【不属于父类】print(type(b) == A)  # False输出:
True
True
True
False

综上所述
isinstance和type的应用场景是不同的:
(1)type主要用于获取未知变量的类型;
(2)isinstance主要用于判断A类是否继承于B类。

引言中的答案是:

True
False
True
False

这篇关于【python】type和isinstance的用法和区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1002889

相关文章

Python将博客内容html导出为Markdown格式

《Python将博客内容html导出为Markdown格式》Python将博客内容html导出为Markdown格式,通过博客url地址抓取文章,分析并提取出文章标题和内容,将内容构建成html,再转... 目录一、为什么要搞?二、准备如何搞?三、说搞咱就搞!抓取文章提取内容构建html转存markdown

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

Python Websockets库的使用指南

《PythonWebsockets库的使用指南》pythonwebsockets库是一个用于创建WebSocket服务器和客户端的Python库,它提供了一种简单的方式来实现实时通信,支持异步和同步... 目录一、WebSocket 简介二、python 的 websockets 库安装三、完整代码示例1.

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

Springboot @Autowired和@Resource的区别解析

《Springboot@Autowired和@Resource的区别解析》@Resource是JDK提供的注解,只是Spring在实现上提供了这个注解的功能支持,本文给大家介绍Springboot@... 目录【一】定义【1】@Autowired【2】@Resource【二】区别【1】包含的属性不同【2】@

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Java中的String.valueOf()和toString()方法区别小结

《Java中的String.valueOf()和toString()方法区别小结》字符串操作是开发者日常编程任务中不可或缺的一部分,转换为字符串是一种常见需求,其中最常见的就是String.value... 目录String.valueOf()方法方法定义方法实现使用示例使用场景toString()方法方法

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

MyBatis 动态 SQL 优化之标签的实战与技巧(常见用法)

《MyBatis动态SQL优化之标签的实战与技巧(常见用法)》本文通过详细的示例和实际应用场景,介绍了如何有效利用这些标签来优化MyBatis配置,提升开发效率,确保SQL的高效执行和安全性,感... 目录动态SQL详解一、动态SQL的核心概念1.1 什么是动态SQL?1.2 动态SQL的优点1.3 动态S