isinstance()
和 issubclass()
的功能与用法
1. isinstance(obj, classinfo)
功能:检查对象 obj
是否是 classinfo
类(或其子类)的实例。
返回值:True
或 False
。
用法:
class Animal: pass
class Dog(Animal): passdog = Dog()
print(isinstance(dog, Dog)) # True(直接类)
print(isinstance(dog, Animal)) # True(父类)
print(isinstance(dog, str)) # False(无关类)
特点:
- 支持检查多个类(元组形式):
print(isinstance(dog, (Dog, Animal, str))) # True(匹配任一即可)
- 适用于动态类型校验(如函数参数验证)。
2. issubclass(cls, classinfo)
功能:检查类 cls
是否是 classinfo
的子类(或自身)。
返回值:True
或 False
。
用法:
class Animal: pass
class Dog(Animal): passprint(issubclass(Dog, Animal)) # True(子类)
print(issubclass(Dog, Dog)) # True(自身)
print(issubclass(Dog, object)) # True(所有类继承自 object)
print(issubclass(Animal, Dog)) # False
特点:
- 同样支持元组检查多类:
print(issubclass(Dog, (Animal, str))) # True
- 常用于类关系设计或框架中约束继承关系。
核心区别
函数 | 作用对象 | 检查目标 | 典型场景 |
---|---|---|---|
isinstance() | 对象 (obj ) | 是否是某类的实例 | 运行时类型验证 |
issubclass() | 类 (cls ) | 是否是某类的子类 | 设计时继承关系校验 |
示例场景:
def process_animal(animal):if not isinstance(animal, Animal):raise TypeError("必须传入 Animal 或其子类实例")# 处理逻辑...class Bird(Animal): pass
process_animal(Bird()) # 通过
process_animal("abc") # 报错