继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Python 的内置函数 isinstance

2882716
关注TA
已关注
手记 70
粉丝 0
获赞 0

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

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP