为了账号安全,请及时绑定邮箱和手机立即绑定

Python 的内置函数 isinstance

标签:
Python API

Python 的内置函数 isinstance() 用于检查一个对象是否属于指定的类型或类型元组。它是 Python 类型检查的重要工具,比传统的 type() 函数更灵活,支持继承关系的判断。

基本语法

isinstance(object, classinfo)
  • object:要检查的对象
  • classinfo:可以是一个类型(如 int, str),也可以是一个由类型组成的元组

功能特点

  1. 类型检查:可以检查对象是否是特定类型

    isinstance(42, int)  # 返回 True
    
  2. 继承关系判断:会考虑类的继承关系

    class Parent: pass
    class Child(Parent): pass
    
    obj = Child()
    isinstance(obj, Parent)  # 返回 True
    
  3. 多类型检查:通过类型元组可以同时检查多种类型

    isinstance([1, 2, 3], (list, tuple))  # 返回 True
    

与 type() 的区别

  • type() 不考虑继承关系,只返回对象的确切类型
  • isinstance() 会考虑继承关系,更适用于面向对象编程

实际应用场景

  1. 参数类型验证

    def calculate_area(radius):
        if not isinstance(radius, (int, float)):
            raise TypeError("半径必须是数字")
        return 3.14 * radius ** 2
    
  2. 多态处理

    def process_data(data):
        if isinstance(data, str):
            return data.upper()
        elif isinstance(data, (list, tuple)):
            return [str(item) for item in data]
    
  3. 接口兼容性检查

    def save_to_file(obj):
        if isinstance(obj, (str, bytes)):
            # 处理字符串或字节数据
            pass
        elif hasattr(obj, 'read') and callable(obj.read):
            # 处理文件类对象
            pass
    

注意事项

  1. 对于布尔值,isinstance(True, int) 会返回 True,因为 boolint 的子类
  2. 在 Python 3 中,字符串检查应该使用 str 而不是 basestring(Python 2)
  3. 对于抽象基类(ABC),isinstance() 也能正确识别实现了相应接口的类

性能考虑

isinstance() 是一个相对高效的操作,但在性能关键的代码中,过度使用类型检查可能会影响性能。通常建议只在接口边界或需要确保类型安全的地方使用。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消