如何在Python中使用type()和isinstance()

156 阅读3分钟

当用 Python 编写程序时,你可能需要检查一个给定的对象是什么类型或类别。你也可能想看看一个特定的对象是否是一个特定类的实例。在 Python 中有两个内置函数可以做这种事情。它们是 type() 函数和 isinstance() 函数。在Python中所有的东西都是一个对象,type() 函数将告诉你一个给定的变量是什么类型的对象。现在让我们看一下 Python 中 type() 和 isinstance() 的几个例子。


两个不同的类

class Monitor():
    def __init__(self, model):
        self.model = model


class Keyboard():
    def __init__(self, model):
        self.model = model

上面的代码简单地定义了两个类。我们可以看到有一个监视器类和一个键盘类。很简单。


创建类的对象

monitor1 = Monitor("Panasonic")
monitor2 = Monitor("LG")
keyboard1 = Keyboard("Microsoft")
keyboard2 = Keyboard("IBM")

我们正在实例化四个不同的对象。


使用type()来检查对象的类型

print(type(monitor1))
print(type(keyboard1))
<class '__main__.Monitor'>
<class '__main__.Keyboard'>

这里我们使用type()函数和print()函数结合起来,向控制台打印出一个对象的类型。我们看到熟悉的 Python 符号,用来显示一个类的类型。这就是预期的结果。我们有一个类型为 Monitor 的对象和另一个类型为 Keyboard 的对象。

将两个类型放在一起比较

print(type(monitor1) == type(monitor2))
print(type(monitor1) == type(keyboard2))
True
False

type() 函数很有用,因为你可以用它来比较两个不同的对象,看它们是否是同一类型。上面的代码显示,两个Monitor对象是同一类型的,而Monitor和Keyboard显然是不同的类型。


使用isinstance()来比较一个特定的实例和一个已知的类型


print(isinstance(monitor1, Monitor))
print(isinstance(keyboard1, Keyboard))
print(isinstance(keyboard2, Monitor))
True
True
False

要看一个给定的对象是否是一个特定类的实例,你可以使用上面的isinstance()函数。当使用isinstance()时,传递的第一个参数是你想检查的对象。第二个参数是你要比较的对象类型。换句话说,这个第一个参数是否是第二个参数的实例。当代码运行时,我们会得到预期的结果。 monitor1是Monitor类的一个实例。 keyboard1是Keyboard类的一个实例。但是键盘2不是监视器类的一个实例。


所有东西都是一个对象

在Python中,所有东西都是Object类的一个子类。我们可以使用 isinstance() 函数用我们的新技能来测试这一点。在下面的代码中,我们用 Python 内置的 Object 基类来检查各种对象,比如一个字符串、一个布尔值、一个数字、一个类,甚至一个[lambda]函数。正如我们所看到的,每一个测试的结果都是 "真"!所以你看,在Python中,一切都真的是一个对象。

print(isinstance(monitor1, object))
print(isinstance(keyboard1, object))
print(isinstance('Some String', object))
print(isinstance(True, object))
print(isinstance(7, object))
print(isinstance(Monitor, object))
print(isinstance(lambda x: x, object))
True
True
True
True
True
True
True