本系列将会陆续整理分享一些的Python内置函数。
-
通过百度网盘获取:
链接:https://pan.baidu.com/s/11x9_wCZ3yiYOe5nVcRk2CQ?pwd=mnsj
提取码:mnsj
-
前往GitHub获取:
https://github.com/returu/Python_built-in_functions
isinstance(object, classinfo)
-
object:需要检查的对象; -
classinfo:可以是单个类型或者包含多个类型的元组,用于检查object是否是这些类型中的一个。如果classinfo不是一个类型,也不是类型元组或包含类型元组的元组,那么会引发一个TypeError异常。
返回值:
下面是一些使用 isinstance() 函数的示例:
-
示例 1:单个类型判断
如果 classinfo 是一个单一的类型对象(比如 int、str、list 或者任何自定义类),那么 isinstance() 会检查 object 是否是这个类型的一个实例,或者是这个类型的任何子类的一个实例。
a = 10
print(isinstance(a, int))
# 输出: True
print(isinstance(a, str))
# 输出: False
class Dog:
pass
class Cat:
pass
my_dog = Dog()
print(isinstance(my_dog, Dog))
# 输出: True
print(isinstance(my_dog, Cat))
# 输出: False
-
示例 2:多个类型判断
如果 classinfo 是一个包含多个类型对象的元组(或者递归地,包含其他这样的元组的元组),那么 isinstance() 会检查 object 是否是这个元组中任何一个类型的一个实例,或者是这些类型中任何一个的任何子类的一个实例。
b = [1, 2, 3]
print(isinstance(b, (list, tuple)))
# 输出: True
c = (4, 5, 6)
print(isinstance(c, (list, tuple)))
# 输出: True
d = "hello"
print(isinstance(d, (list, tuple)))
# 输出: False
在 Python 3.10 及以上版本中,可以使用联合类型(Union Type)进行类似的判断:
from typing import Union
c = [1, 2, 3]
print(isinstance(c, Union[list, tuple]))
# 输出: True
-
示例 3:继承关系中的判断
在类的继承体系中,isinstance() 也可以正确判断。如果一个类继承了另一个类,那么子类的实例也会被认为是父类的实例。
在下面的示例中,my_super_dog是SuperDog类的实例,而SuperDog继承自Dog,Dog又继承自Animal。所以my_super_dog也是Animal类的间接实例,isinstance()返回True。
class Animal:
pass
class Dog(Animal):
pass
class SuperDog(Dog):
pass
my_super_dog = SuperDog()
print(isinstance(my_super_dog, Animal))
# 输出: True


本篇文章来源于微信公众号: 码农设计师