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 类型注解 静态类型检查(不运行)
相关推荐
老歌老听老掉牙3 小时前
空间曲线数据的拼接与几何变换分析
python·曲线
databook8 小时前
使用 SciPy 库进行时间序列分析
python·数据分析·scipy
java资料站8 小时前
十一、评估测试
开发语言·人工智能·python
szial8 小时前
网络爬虫与 CDP 实战(二):浏览器能访问,Python 却被拒绝?拆开登录态与 CSRF
爬虫·python·csrf
青少儿编程课堂9 小时前
后缀自动机解析:本质不同子串与最长重复片段统计
c++·python·算法·bfs·信息学竞赛
怕浪猫9 小时前
LLM 面试必问的 8 个问题,答不上来直接淘汰
人工智能·python·面试
老歌老听老掉牙10 小时前
从三维旋转的深度解析到Python实现:绕任意轴旋转的奥秘
python·三维旋转
打工仔折腾 AI10 小时前
工业场景下时序库与实时计算一体化架构选型实践对比
java·开发语言·后端·python·性能优化·架构·ai agent 实战
梦幻精灵_cq11 小时前
sumdir——一个伪python.built-in的“术法”打造
python
weixin_4407305012 小时前
函数return、参数、参数组、递归函数、高阶函数等小结
开发语言·python