在 Python 中,有多个函数和方法可以用来检查数据类型,以下是常用的几种:


1. type()

  • 功能:返回对象的类型(返回具体的类型对象)。
  • 特点:精确匹配类型,不适用于继承关系的判断。
  • 示例
    print(type(5))        # <class 'int'>
    print(type(3.14))     # <class 'float'>
    print(type("hello"))  # <class 'str'>
    
    if type(5) is int:
        print("是整数")
    

⚠️ 注意:type() 不推荐用于类型检查,尤其在涉及继承时。


2. isinstance()

  • 功能:判断一个对象是否是某个类或其子类的实例。
  • 推荐使用:这是最推荐的类型检查方式,支持继承。
  • 示例
    print(isinstance(5, int))           # True
    print(isinstance(3.14, float))      # True
    print(isinstance("hello", str))     # True
    print(isinstance([1, 2], list))     # True
    
    # 支持元组,检查多种类型之一
    print(isinstance(5, (int, float, str)))  # True
    

最佳实践:优先使用 isinstance() 进行类型检查。


3. issubclass()

  • 功能:判断一个类是否是另一个类的子类。
  • 用途:用于类之间的继承关系检查。
  • 示例
    class Animal: pass
    class Dog(Animal): pass
    
    print(issubclass(Dog, Animal))  # True
    print(issubclass(int, object))  # True
    

补充:结合 types 模块(高级用法)

Python 的 types 模块提供了一些内置类型的引用,可用于更精确的判断:

import types

def func(): pass

print(type(func) is types.FunctionType)  # True
print(type([1,2,3]) is types.ListType)   # 在 Python 3 中 ListType 已移除

注意:types 模块主要用于函数、生成器、模块等特殊类型的判断。


总结

方法 用途 是否推荐
type() 获取对象的具体类型 ❌ 不推荐用于类型检查
isinstance() 判断对象是否属于某类型(支持继承) 强烈推荐
issubclass() 判断类的继承关系 ✅ 用于类之间检查

📌 建议:在做类型检查时,优先使用 isinstance(obj, type)

更多推荐