Python 中的类型判断方法

Python 提供了多种类型判断方法,每种方法的场景也不同。主要分为类型检查(运行时判断) 和**类型提示(静态检查)**两大类。

一、运行时类型判断

1. type():查看对象类型

type() 返回对象的确切类型。

复制代码
print(type(42))          # <class 'int'>
print(type(3.14))        # <class 'float'>
print(type("hello"))     # <class 'str'>
print(type([1, 2, 3]))   # <class 'list'>
print(type({"a": 1}))    # <class 'dict'>

# 判断是否等于某个类型
if type(value) == int:
    print("这是整数")

注意 :type() 在继承关系中不会考虑子类,它返回的是对象的具体类型,而不是继承链。

复制代码
class Animal:
    pass

class Dog(Animal):
    pass

dog = Dog()
print(type(dog))         # <class '__main__.Dog'>
print(type(dog) == Dog)  # True
print(type(dog) == Animal)  # False(Dog 不是 Animal)

2. isinstance():判断是否属于某个类型(推荐)

isinstance() 会检查对象的类型是否与指定类型匹配,包括父类。

复制代码
class Animal:
    pass

class Dog(Animal):
    pass

dog = Dog()

print(isinstance(dog, Dog))      # True
print(isinstance(dog, Animal))   # True(Dog 是 Animal 的子类)
print(isinstance(dog, object))   # True(所有类都继承 object)
print(isinstance(42, int))       # True
print(isinstance(42, (int, float)))# True(元组表示任一类型)
方法 是否考虑继承关系 推荐度
type(obj) == cls 不考虑 不推荐
isinstance(obj, cls) 考虑 推荐

3. issubclass():判断类继承关系

复制代码
class Animal:
    pass

class Dog(Animal):
    pass

class Cat(Animal):
    pass

print(issubclass(Dog, Animal))   # True
print(issubclass(Cat, Animal))   # True
print(issubclass(Dog, Cat))      # False
print(issubclass(Dog, (Cat, Animal)))  # True(任一匹配)

4. callable():判断是否可调用

复制代码
def my_func():
    pass

class MyClass:
    def method(self):
        pass

print(callable(my_func))    # True
print(callable(MyClass))    # True
print(callable(MyClass.method))  # True(未绑定的方法)
print(callable(42))         # False
print(callable("hello"))    # False

5. 检查可迭代对象

复制代码
from collections.abc import Iterable

print(isinstance([1, 2, 3], Iterable))  # True
print(isinstance("hello", Iterable))    # True
print(isinstance(42, Iterable))         # False

对比总结

方法 用途 适用场景
type(obj) 获取对象的确切类型 需要精确判断类型时
isinstance(obj, cls) 判断对象是否属于某个类型(包括父类) 推荐,大多数场景
issubclass(cls1, cls2) 判断类继承关系 检查类是否派生自另一个类
callable(obj) 判断对象是否可调用 检查函数、方法等
hasattr(obj, attr) 判断对象是否有某个属性/方法 鸭子类型检查
type hints 类型注解 静态类型检查(不运行)
相关推荐
锋行天下6 小时前
langgraph 后端发自定义数据,前端接收方法概括
人工智能·python
benchmark_cc8 小时前
用 QuantDash 读取单只股票五档盘口:抽样、缺失值检查与复现记录
python·数据分析·pandas·量化交易·股票数据·quantdash
曲径海盗9 小时前
【Python 学习第 55 天】列表基础
python·学习笔记·编程入门
专注仿真9 小时前
知识问答模型用到的算法集详解及代码实例
python·算法·代码·大模型训练·控制算法
jyOverQ9 小时前
我写了一个 CSDN Markdown 图片助手:告别本地图片逐张上传
python·工具·csdn
刘马想放假12 小时前
CANviz 使用指南|Linux 安装、DBC 解码、实时曲线与 J1939 实战
linux·python·websocket
2601_9679873713 小时前
python判断变量名不要调用任何函数实现
python·函数·语法·判断·变量名
卷无止境14 小时前
SALib敏感性分析的python库学习笔记
后端·python
duansamve15 小时前
Python3+Flask+PostgreSQL18+Vue3项目生产环境用docker如何部署?
python·docker·flask
特立独行的猫A15 小时前
少 3 个环节、少 1 次 ABI、少 3500 行代码:cj-tauri 与 Ionic/Capacitor 的鸿蒙桥接机制对比
java·后端·python