Python中对象obj类型确定最pythonic的方式——isinstance()函数

python中确定对象obj的类型,isinstance函数最是优雅,type、issubclass等函数也可以,但终究“曲折”。


(笔记模板由python脚本于2024年10月07日 19:42:38创建,本篇笔记适合喜欢python的coder翻阅)


【学习的细节是欢悦的历程】


  自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
            —— 华罗庚


等风来,不如追风去……


isinstance函数最是优雅
对象类型判定方式
(type、issubclass等函数也可以)


本文质量分:

97 97 97

本文地址: 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_classint 的子类,所以 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篇。


推荐条件 阅读量突破6.00k
(更多热博,请点击蓝色文字跳转翻阅)

  • 截屏图片
    在这里插入图片描述
      (此文涉及ChatPT,曾被csdn多次下架,前几日又因新发笔记被误杀而落马。躺“未过审”还不如回收站,回收站还不如永久不见。😪值此年底清扫,果断移除。留此截图,以识“曾经”。2023-12-31)



回页首


老齐漫画头像

精品文章:

来源:老齐教室


Python 入门指南【Python 3.6.3】


好文力荐:


CSDN实用技巧博文:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦幻精灵_cq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值