python中确定对象obj的类型,isinstance函数最是优雅,type、issubclass等函数也可以,但终究“曲折”。
(笔记模板由python脚本于2024年10月07日 19:42:38创建,本篇笔记适合喜欢python的coder翻阅)
-
Python 官网:https://www.python.org/
-
Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单……
地址:https://lqpybook.readthedocs.io/
自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
—— 华罗庚
- My CSDN主页、My HOT博、My Python 学习个人备忘录
- 好文力荐、 老齐教室
本文质量分:
本文地址: https://blog.csdn.net/m0_57158496/article/details/142745133
CSDN质量分查询入口:http://www.csdn.net/qc
- ◆ Python中对象类型判定最优雅的方式
- 1、`type()` 函数
- 2、 `isinstance()` 函数
- 3、 `issubclass()` 函数
- 4、 `hasattr()` 函数
- 5、 `callable()` 函数
- 6、 `dir()` 函数
- 7、推荐使用isinstance()
- 8、结论
◆ Python中对象类型判定最优雅的方式
在Python中,你可以使用几种不同的方法来判定一个对象的类型。
1、type()
函数
type()
函数可以返回一个对象的类型。它可以与Python的内置类型比较,也可以与types
模块中的类型比较。
a = 10
print(type(a)) # 输出: <class 'int'>
if type(a) is int:
print("a 是一个整数")
2、 isinstance()
函数
isinstance()
函数用于检查一个对象是否是一个特定类或者类型(包括父类)的实例。
a = 10
print(isinstance(a, int)) # 输出: True
# isinstance 也支持类型元组,可以检查多种类型
if isinstance(a, (int, float)):
print("a 是一个整数或浮点数")
3、 issubclass()
函数
issubclass()
函数用于检查一个类是否是另一个类的子类。
class A:
pass
class B(A):
pass
print(issubclass(B, A)) # 输出: True
4、 hasattr()
函数
如果你想要检查一个对象是否有某个属性,可以使用 hasattr()
函数。
class MyClass:
def __init__(self):
self.my_attribute = 10
obj = MyClass()
print(hasattr(obj, 'my_attribute')) # 输出: True
5、 callable()
函数
如果你想要检查一个对象是否是可调用的(例如,函数或方法),可以使用 callable()
函数。
def my_function():
pass
print(callable(my_function)) # 输出: True
6、 dir()
函数
dir()
函数返回一个列表,包含了对象的大多数属性和方法名。
print(dir(10)) # 输出: 列出整数对象的所有属性和方法
7、推荐使用isinstance()
通常情况下,推荐使用 isinstance()
而不是 type()
来检查对象的类型,因为 isinstance()
支持继承,这使得它更灵活。
例如,如果你有一个自定义类继承自 int
,使用 isinstance()
仍然会返回 True
,而 type()
则不会。
首先,我们定义一个继承自 int
的自定义类My_class
。然后,我们创建一个 My_class
类的实例my_int,并用 isinstance()
和 type()
分别检查它的类型:
示例代码
class My_class(int):
pass
my_int = My_class()
print(f"\n\n{isinstance(my_int, int) = }\n\n{type(my_int) = }\n\n")
代码运行效果截屏图片
class My_class(int):
pass
my_int = My_class()
print(f"\n\n{isinstance(my_int, int) = }\n\n{type(my_int) = }\n\n{type(my_int) is int = }")
代码运行效果截屏图片
在这个例子中,isinstance(my_int, int)
返回 True
,因为 My_class
是 int
的子类,所以 my_int
虽然是 My_class
类的实例,但也被视为 int
类型。而 type(my_int) is int
返回 False
,因为 type()
检查的是对象直接的类型,而不是继承关系。
这就是为什么在检查对象类型时推荐使用 isinstance()
,因为它考虑了继承,更加灵活和通用。
8、结论
Python中,有多达
七
七
七种方式可以得到对象的类型属性,可以方便地据其实际“使用环境”选取。一般情况下,isinstance(obj, type)
函数是最优选择。
上一篇: 如何写出Pythonic的代码?(f-string、三元操作、各种解析式、生成器装饰器的熟练运用,“内库”引用和函数封装再加持PEP8,撰写的脚本不pythonic都难。😎)
下一篇:
我的HOT博:
本次共计收集 311 篇博文笔记信息,总阅读量43.82w。数据于2024年03月22日 00:50:22完成采集,用时6分2.71秒。阅读量不小于6.00k的有
7
7
7篇。
-
001
标题:让QQ群昵称色变的神奇代码
(浏览阅读 5.9w )
地址:https://blog.csdn.net/m0_57158496/article/details/122566500
点赞:25 收藏:86 评论:17
摘要:让QQ昵称色变的神奇代码。
首发:2022-01-18 19:15:08
最后编辑:2022-01-20 07:56:47 -
002
标题:Python列表(list)反序(降序)的7种实现方式
(浏览阅读 1.1w )
地址:https://blog.csdn.net/m0_57158496/article/details/128271700
点赞:8 收藏:35 评论:8
摘要:Python列表(list)反序(降序)的实现方式:原址反序,list.reverse()、list.sort();遍历,全数组遍历、1/2数组遍历;新生成列表,resersed()、sorted()、负步长切片[::-1]。
首发:2022-12-11 23:54:15
最后编辑:2023-03-20 18:13:55 -
003
标题:pandas 数据类型之 DataFrame
(浏览阅读 9.7k )
地址:https://blog.csdn.net/m0_57158496/article/details/124525814
点赞:7 收藏:36
摘要:pandas 数据类型之 DataFrame_panda dataframe。
首发:2022-05-01 13:20:17
最后编辑:2022-05-08 08:46:13 -
004
标题:个人信息提取(字符串)
(浏览阅读 8.2k )
地址:https://blog.csdn.net/m0_57158496/article/details/124244618
点赞:2 收藏:15
摘要:个人信息提取(字符串)_个人信息提取python。
首发:2022-04-18 11:07:12
最后编辑:2022-04-20 13:17:54 -
005
标题:Python字符串居中显示
(浏览阅读 7.6k )
地址:https://blog.csdn.net/m0_57158496/article/details/122163023
评论:1 -
006
标题:罗马数字转换器|罗马数字生成器
(浏览阅读 7.5k )
地址:https://blog.csdn.net/m0_57158496/article/details/122592047
摘要:罗马数字转换器|生成器。
首发:2022-01-19 23:26:42
最后编辑:2022-01-21 18:37:46 -
007
标题:回车符、换行符和回车换行符
(浏览阅读 6.0k )
地址:https://blog.csdn.net/m0_57158496/article/details/123109488
点赞:2 收藏:3
摘要:回车符、换行符和回车换行符_命令行回车符。
首发:2022-02-24 13:10:02
最后编辑:2022-02-25 20:07:40
截屏图片
(此文涉及ChatPT,曾被csdn多次下架,前几日又因新发笔记被误杀而落马。躺“未过审”还不如回收站,回收站还不如永久不见。😪值此年底清扫,果断移除。留此截图,以识“曾经”。2023-12-31)
精品文章:
- 好文力荐:齐伟书稿 《python 完全自学教程》 Free连载(已完稿并集结成书,还有PDF版本百度网盘永久分享,点击跳转免费🆓下载。)
- OPP三大特性:封装中的property
- 通过内置对象理解python'
- 正则表达式
- python中“*”的作用
- Python 完全自学手册
- 海象运算符
- Python中的 `!=`与`is not`不同
- 学习编程的正确方法
来源:老齐教室
◆ Python 入门指南【Python 3.6.3】
好文力荐:
- 全栈领域优质创作者——[寒佬](还是国内某高校学生)博文“非技术文—关于英语和如何正确的提问”,“英语”和“会提问”是编程学习的两大利器。
- 【8大编程语言的适用领域】先别着急选语言学编程,先看它们能干嘛
- 靠谱程序员的好习惯
- 大佬帅地的优质好文“函数功能、结束条件、函数等价式”三大要素让您认清递归
CSDN实用技巧博文:
- 8个好用到爆的Python实用技巧
- python忽略警告
- Python代码编写规范
- Python的docstring规范(说明文档的规范写法)