1. 检查多个类型
使用元组作为第二个参数可以检查对象是否属于元组中的任意类型:
value = 3.14 # 检查是否为整数或浮点数 print(isinstance(value, (int, float))) # True # 检查是否为字符串或列表 print(isinstance(value, (str, list))) # False
掌握类型检查的关键点与常见陷阱
isinstance()是Python内置函数,用于判断一个对象是否属于指定的类型或类型元组之一。
isinstance(object, classinfo)
# 基本类型检查 num = 42 print(isinstance(num, int)) # True # 字符串检查 text = "Hello Python" print(isinstance(text, str)) # True # 列表检查 my_list = [1, 2, 3] print(isinstance(my_list, list)) # True
使用元组作为第二个参数可以检查对象是否属于元组中的任意类型:
value = 3.14 # 检查是否为整数或浮点数 print(isinstance(value, (int, float))) # True # 检查是否为字符串或列表 print(isinstance(value, (str, list))) # False
isinstance()会考虑继承关系,对于子类对象返回True:
class Animal: pass class Dog(Animal): pass my_dog = Dog() print(isinstance(my_dog, Dog)) # True print(isinstance(my_dog, Animal)) # True (因为Dog继承自Animal)
一些特殊类型的检查需要特别注意:
# 布尔值实际上是int的子类 print(isinstance(True, bool)) # True print(isinstance(True, int)) # True (!) # None检查 print(isinstance(None, type(None))) # True print(isinstance(None, object)) # True # 检查是否为可迭代对象 from collections.abc import Iterable data = [1, 2, 3] print(isinstance(data, Iterable)) # True
使用collections.abc模块检查对象是否符合特定接口:
from collections.abc import Sequence, Mapping # 序列类型检查 print(isinstance([1, 2, 3], Sequence)) # True print(isinstance((1, 2, 3), Sequence)) # True print(isinstance("hello", Sequence)) # True # 映射类型检查 print(isinstance({"a": 1}, Mapping)) # True print(isinstance([1, 2, 3], Mapping)) # False
避免混淆类型和类:
# 错误方式 if type(my_dog) == Animal: ... # 正确方式 if isinstance(my_dog, Animal): ...
布尔类型是int的子类:
print(True + 1) # 2 print(isinstance(True, int)) # True
直接检查容器内部类型无效:
from typing import List my_list = [1, 2, 3] # 错误方式 print(isinstance(my_list, List[int])) # 无效! # 正确方式 print(isinstance(my_list, list)) # True
检查自定义类时的注意事项:
class Base: pass class Derived(Base): pass obj = Derived() print(isinstance(obj, Base)) # True (检查父类) print(isinstance(Base, Derived)) # False
本文由CaoWa于2025-08-14发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://521pj.cn/20258132.html
发表评论