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 类型注解 静态类型检查(不运行)
相关推荐
傻啦嘿哟4 小时前
某招聘平台爬虫:爬取招聘岗位数据,分析各城市薪资水平
开发语言·爬虫·python
2501_933670794 小时前
2026秋招量化分析岗技能栈:Python、SQL、统计建模、回测项目怎么准备
开发语言·python·sql
2601_962077604 小时前
python Dejavu库快速识别音频指纹实例探究
python·音乐识别·dejavu库·音频指纹识别·实例探究
科技苑4 小时前
如何用Python编程实现一个简单的Web爬虫?
人工智能·python
dayDayupbetter5 小时前
Visual C++ 2010安装与使用高手秘籍
python
隐擎fox5 小时前
深入理解网络传输层安全:TLS 指纹识别(JA3/JA4)原理与 Python 协议层检测实战
爬虫·python·网络协议·安全·网络安全·https
医疗信息化王工5 小时前
DataForge:基于 Python 的数据库批量导出 Excel 工具——从架构到部署的全流程实战
数据库·python·excel
小玮看世界6 小时前
[Python]从合并区间到传感器融合区:合并区间在传感器区域融合的实际落地
开发语言·python
Java陈序员6 小时前
轻量运维面板!一款现代化的服务器控制面板工具!
运维·服务器·python·react.js·github
2601_962097367 小时前
1. 使用 C 或 C++ 扩展 Python
python·api·c·引用计数·扩展模块