isinstance() 与 type() 判断数据类型

738 阅读2分钟

这是我参与11月更文挑战的第10天,活动详情查看:2021最后一次更文挑战

要判断某个变量是否是某种数据类型,可以使用isinstance()也可以是用type()

type()

class type(namebasesdict,  **kwds)

  • 传入一个参数时,返回 object 的类型。 返回值是一个 type 对象,通常与 object.__class__ 所返回的对象相同。
  • 传入三个参数时,返回一个新的 type 对象。(用不到,不用看)
    • name 字符串即类名并会成为 __name__ 属性
    • bases 元组包含基类并会成为 __bases__ 属性;如果为空则会添加所有类的终极基类 object。 
    • dict 字典包含类主体的属性和方法定义;它在成为 __dict__ 属性之前可能会被拷贝或包装

用它判断数据类型是:

s = 'hello world'

print(type(s) == str)
>> 
True

isinstance()

isinstance(objectclassinfo)

  • 如果 object 参数是 classinfo 参数的实例,或其(直接、间接或 virtual )子类的实例,则返回 True。 如果 object 不是给定类型的对象,则总是返回 False
  • 如果 classinfo 是类型对象的元组(或由该类元组递归生成)或多个类型的 union 类型,那么当 object 是其中任一类型的实例时就会返回 True。如果 classinfo 不是某个类型或类型元组,将会触发 TypeError 异常。

用它判断数据类型是:

s = 'hello world'

print(isinstance(s,str))
>> 
True

还可以这样:

s = 'hello world'

print(isinstance(s,(str,int,float)))
print(isinstance(s,(bool,int,float)))
>> 
True
False

isinstance() 与 type() 区别

  • type() 不会认为子类是一种父类类型,不考虑继承关系。
  • isinstance() 会认为子类是一种父类类型,考虑继承关系。

官方说:如果要判断两个类型是否相同推荐使用 isinstance()

image.png

因为:

class F:
    def __init__(self):
        pass
class S(F):
    def __init__(self):
        pass


print(isinstance(F(), F))
print(type(F()) == F)
print(isinstance(S(), F))
print(type(S()) == F)
True
True
True
False

由此可见isinstance()的功能更强大,因此判断两个类型是否相同推荐使用isinstance()。