isinstance 和 type 的区别

313 词

语法

isinstance(object, classinfo)
type(object)

参数说明如下:
  • object:要检查类型的对象。
  • classinfo:要检查的类或由类组成的元组。

例如:我们有一个 Animal 类和一个其派生类 Dog:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Animal: # 类
def speak(self):
print("Animal speaks")


class Dog(Animal): # 子类
def speak(self):
print("Dog barks")


animal = Animal()
animal.speak() # 输出:"Animal speaks"

dog = Dog()
dog.speak() # 输出:"Dog barks"

区别

1
2
3
4
5
6
7
8
# 使用 isinstance() 检查对象是否是指定类(或其派生类)的实例
print(isinstance(dog, Animal)) # True
print(isinstance(dog, Dog)) # True

# 使用 type() 获取对象的类型
print(type(dog)) # <class '__main__.Dog'>
print(type(dog) is Animal) # False
print(type(dog) is Dog) # True
isinstance

可以看到isinstance返回的都是 True,因为 dogAnimalDog的实例(继承关系)。

type

type返回的是<class '__main__.Dog'>FalseTrue,因为它不会考虑继承关系,只返回对象的确切(当前)类型,所以type会判断dogAnimal是不同的类型。

总结

  1. isinstance(object, classinfo)函数用于检查一个对象是否是指定类(或该类的派生类)的实例。
    它会考虑继承关系,即如果对象是指定类的派生类的实例。
  2. type(object)函数返回对象的类型。
    它不会考虑继承关系,只返回对象的确切类型。
留言