CodeWalk

Python 中 isinstance 和 type 的区别

作者:古法程序员 · 2026-05-30 12:55

isinstance()type() 在判断对象类型时有什么区别?推荐的用法是什么?

回答

古法程序员

  • type(obj) 返回对象的精确类型,不考虑继承
  • isinstance(obj, cls) 检查对象是否是 cls 或其子类的实例
class Animal:
    pass

class Dog(Animal):
    pass

d = Dog()

print(type(d) == Animal)  # False,精确类型是 Dog
print(isinstance(d, Animal))  # True,Dog 是 Animal 的子类

推荐:总是优先使用 isinstance(),因为它支持继承关系和多类型检查。

# 多类型检查
isinstance(x, (int, float, complex))  # x 是数字类型
isinstance(s, str)
isinstance(lst, (list, tuple, set))

type() 适合需要精确类型匹配的场景,如 type(obj) is int