内置函数 isinstance() 用于检查一个对象是否是某个类或其子类的实例。它支持类型继承判断,并且可以一次性检测多个类型,是类型检查与条件分支中常用的工具。

一、函数语法

isinstance(object, classinfo)

参数:

object:要检测的对象。

classinfo:单个类、类型,或由多个类/类型组成的元组。

返回值:

返回 True,表示 object 是 classinfo 或其子类的实例。

返回 False,表示不符合上述条件。

二、基础用法示例

1、检测单一类型

print(isinstance(10, int))        # True
print(isinstance("Hello", str))   # True
print(isinstance([1, 2], list))   # True
print(isinstance(3.14, int))      # False

2、检测多个类型

print(isinstance(3.14, (int, float)))  # True
print(isinstance("Hi", (int, float)))  # False

3、继承关系检测

class Animal: pass
class Dog(Animal): pass

d = Dog()
print(isinstance(d, Dog))      # True
print(isinstance(d, Animal))   # True  # 继承关系成立

三、进阶技巧

1、动态类型检查

def process(value):
    if isinstance(value, (int, float)):
        return value * 2
    raise TypeError("仅支持数字类型")

print(process(10))    # 20

2、配合抽象基类(ABC)

from collections.abc import Iterable

print(isinstance([1, 2, 3], Iterable))  # True
print(isinstance(123, Iterable))        # False

3、自定义类型判断

class MyClass: pass

obj = MyClass()
print(isinstance(obj, MyClass))  # True

四、补充说明

1、classinfo 必须是类、类型或类型元组,不能是其他对象。

2、检测内置类型时,可以直接传入内置类型(如 int、str、list)。

3、如果需要判断类本身的继承关系,请使用 issubclass() 而不是 isinstance()。

4、与 的区别:isinstance() 考虑继承关系;type() 严格匹配对象的确切类型,不考虑继承。

点赞有美意,赞赏是鼓励