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 类型注解 静态类型检查(不运行)
相关推荐
幻想时空1 小时前
地图数据采集
python
alphaTao2 小时前
LeetCode 每日一题 2026/7/27-2026/8/2
python·算法·leetcode
Kevin Wang7272 小时前
Nvidia-AGX-spark部署手册——课堂质量诊断(jetpack:r36)
python·docker·容器
Python私教3 小时前
Django 6.1 RC1 实测:FETCH_PEERS 两条 SQL 解决 N+1,select_related 还需要吗?
后端·python·django
玉鸯3 小时前
Agent 的任务编排:从 System Prompt 到 Hierarchical Multi-Agent
python·llm·agent
Python私教3 小时前
Django 6.0 自带 Tasks 到底能不能替代 Celery?跑完 3 组后台任务后我有答案了
后端·python·django
我的xiaodoujiao4 小时前
快速学习Python基础知识详细图文教程14--模块
开发语言·python·学习·测试工具
残影飞雪4 小时前
Ollama对话脚本
python
jerryinwuhan4 小时前
数据预处理技术 2026-2027-1 开篇-课程介绍
大数据·python