isinstance
是一个 Python 内置函数,用于检查一个对象是否是指定类或其子类的实例。isinstance(obj, cls)
返回一个布尔值,表示 obj
是否是 cls
或其子类的实例。类似 type()。
isinstance() 与 type() 区别:
- type() 不会认为子类是一种父类类型,不考虑继承关系。
- isinstance() 会认为子类是一种父类类型,考虑继承关系。
如果要判断两个类型是否相同推荐使用 isinstance()。
语法
isinstance
的语法如下:
isinstance(obj, cls)
其中,obj
是要检查的对象,cls
是要检查的类或类型。如果 obj
是 cls
或其子类的实例,则返回 True
,否则返回 False
。
示例用法
示例一:
class Animal:
pass
class Dog(Animal):
pass
class Cat(Animal):
pass
dog = Dog()
cat = Cat()
print(isinstance(dog, Dog)) # True
print(isinstance(dog, Animal)) # True
print(isinstance(dog, Cat)) # False
print(isinstance(cat, Cat)) # True
print(isinstance(cat, Animal)) # True
print(isinstance(cat, Dog)) # False
在上面的例子中,我们定义了一个 Animal
类和两个子类 Dog
和 Cat
。然后我们创建了一个 Dog
和一个 Cat
的实例,并使用 isinstance
函数来检查它们的类型。例如,isinstance(dog, Dog)
返回 True
,因为 dog
是 Dog
类的一个实例。isinstance(dog, Animal)
也返回 True
,因为 dog
是 Animal
类和 Dog
类的子类之一。而 isinstance(dog, Cat)
返回 False
,因为 dog
不是 Cat
类的实例。
示例二:
>>>a = 2
>>> isinstance (a,int)
True
>>> isinstance (a,str)
False
>>> isinstance (a,(str,int,list)) # 是元组中的一个返回 True
True
type() 与 isinstance()区别:
class A:
pass
class B(A):
pass
isinstance(A(), A) # returns True
type(A()) == A # returns True
isinstance(B(), A) # returns True
type(B()) == A # returns False
总结
isinstance
函数可以用于很多场合,例如:
- 检查一个对象的类型,根据不同类型执行不同的操作。
- 在继承关系中检查对象的类型,判断是否需要调用父类的方法。
- 在编写类型检查代码时,确保代码能够处理不同类型的对象。
需要注意的是,isinstance
函数只检查一个对象的类型,而不考虑对象的值。如果想比较两个对象的值是否相等,可以使用 ==
操作符或其他比较运算符。