介绍
在这个实验中,你将探索 Python 中的类和实例,并学习如何检查一个对象是否是某个类的实例。你将首先创建一个带有类属性和实例属性的 Dog 类,然后创建 Dog 类的实例并访问它们的属性。
接着,你将学习使用 isinstance() 进行类型检查,并将其与 type() 进行精确匹配比较。这将使你能够确定一个对象是否属于某个特定类或该类的子类,从而更深入地理解 Python 中的面向对象编程。
探索类和实例
在这一步中,你将学习 Python 中的类和实例。类就像是创建对象的蓝图,而实例则是根据这些蓝图创建的实际对象。理解类和实例是 Python 面向对象编程的基础。
首先,让我们创建一个名为 Dog 的简单类。
在 LabEx 环境中打开 VS Code 编辑器。
在
~/project目录下创建一个名为dog.py的新文件。~/project/dog.py将以下代码添加到
dog.py中:## Define a class called Dog class Dog: ## Class attribute species = "Canis familiaris" ## Instance attribute def __init__(self, name, age): self.name = name self.age = age在这里,我们定义了一个名为
Dog的类。species是一个类属性,这意味着它由Dog类的所有实例共享。__init__方法是一个特殊的方法,称为构造函数。当创建一个新的Dog对象时,它用于初始化实例属性name和age。现在,让我们创建
Dog类的实例。将以下代码添加到dog.py的末尾:## Create instances of the Dog class buddy = Dog("Buddy", 9) miles = Dog("Miles", 4) ## Access instance attributes print(f"{buddy.name} is {buddy.age} years old.") print(f"{miles.name} is {miles.age} years old.") ## Access class attribute print(f"{buddy.name} is a {buddy.species}.") print(f"{miles.name} is a {miles.species}.")在这部分,我们创建了
Dog类的两个实例:buddy和miles。然后,我们使用点号表示法 (.) 访问它们的实例属性 (name和age) 以及类属性 (species)。要运行
dog.py脚本,请在 VS Code 中打开一个终端并执行以下命令:python dog.py你应该会看到以下输出:
Buddy is 9 years old. Miles is 4 years old. Buddy is a Canis familiaris. Miles is a Canis familiaris.这个输出确认你已经成功创建了
Dog类的实例并访问了它们的属性。
使用 isinstance() 进行类型检查
在这一步中,你将学习如何使用 Python 中的 isinstance() 函数来检查一个对象是否是某个特定类的实例。这是确保你的代码能够正确处理不同类型对象的有用工具。
基于上一步的 Dog 类,让我们创建一个新的 Python 文件来探索 isinstance()。
在 LabEx 环境中打开 VS Code 编辑器。
在
~/project目录下创建一个名为type_check.py的新文件。~/project/type_check.py将
dog.py中的Dog类定义复制到type_check.py中。此时,你的type_check.py文件应该如下所示:class Dog: species = "Canis familiaris" def __init__(self, name, age): self.name = name self.age = age现在,让我们添加一些代码来使用
isinstance()函数。将以下代码添加到type_check.py的末尾:## Create instances of the Dog class buddy = Dog("Buddy", 9) miles = Dog("Miles", 4) ## Check if buddy is an instance of the Dog class print(isinstance(buddy, Dog)) ## Check if miles is an instance of the Dog class print(isinstance(miles, Dog)) ## Check if a string is an instance of the Dog class print(isinstance("Hello", Dog))在这里,我们创建了
Dog类的两个实例buddy和miles。然后,我们使用isinstance()函数来检查这些实例是否为Dog类型。我们还检查了字符串 "Hello" 是否为Dog类的实例。要运行
type_check.py脚本,请在 VS Code 中打开一个终端并执行以下命令:python type_check.py你应该会看到以下输出:
True True False输出结果表明,
buddy和miles确实是Dog类的实例,而字符串 "Hello" 不是。
使用 type() 进行精确匹配比较
在这一步中,你将学习如何使用 Python 中的 type() 函数,并将其与用于类型检查的 isinstance() 函数进行比较。isinstance() 用于检查一个对象是否是某个类或其子类的实例,而 type() 则返回对象的确切类型。
为了说明两者的区别,让我们创建 Dog 类的一个子类,然后使用 isinstance() 和 type() 来检查实例的类型。
在 LabEx 环境中打开 VS Code 编辑器。
修改
~/project目录下的type_check.py文件。~/project/type_check.py添加一个名为
GermanShepherd的新类,它继承自Dog类。此时,你的type_check.py文件应该如下所示:class Dog: species = "Canis familiaris" def __init__(self, name, age): self.name = name self.age = age class GermanShepherd(Dog): def __init__(self, name, age, training_level): super().__init__(name, age) self.training_level = training_level在这里,
GermanShepherd是Dog类的子类。它从Dog类继承了name和age属性,并添加了一个新属性training_level。现在,让我们添加一些代码来使用
isinstance()和type()函数。将以下代码添加到type_check.py的末尾:## Create instances of the Dog and GermanShepherd classes buddy = Dog("Buddy", 9) sparky = GermanShepherd("Sparky", 3, "Advanced") ## Check types using isinstance() print(f"buddy isinstance Dog: {isinstance(buddy, Dog)}") print(f"sparky isinstance Dog: {isinstance(sparky, Dog)}") print(f"sparky isinstance GermanShepherd: {isinstance(sparky, GermanShepherd)}") ## Check types using type() print(f"type(buddy) == Dog: {type(buddy) == Dog}") print(f"type(sparky) == Dog: {type(sparky) == Dog}") print(f"type(sparky) == GermanShepherd: {type(sparky) == GermanShepherd}")在这部分,我们创建了
Dog类的一个实例 (buddy) 和GermanShepherd类的一个实例 (sparky)。然后,我们使用isinstance()和type()来检查它们的类型。要运行
type_check.py脚本,请在 VS Code 中打开一个终端并执行以下命令:python type_check.py你应该会看到以下输出:
buddy isinstance Dog: True sparky isinstance Dog: True sparky isinstance GermanShepherd: True type(buddy) == Dog: True type(sparky) == Dog: False type(sparky) == GermanShepherd: True输出结果显示,
isinstance(sparky, Dog)返回True,因为sparky是GermanShepherd类的实例,而GermanShepherd是Dog类的子类。然而,type(sparky) == Dog返回False,因为type(sparky)返回的确切类型是GermanShepherd,而不是Dog。
总结
在本次实验中,你探索了 Python 中类和实例的基础知识。你学习了如何定义一个类,包括类属性以及在 __init__ 构造函数中初始化的实例属性。
接着,你创建了 Dog 类的实例,并为它们的特定属性赋值。最后,你使用点号表示法访问了实例属性(如 name、age)和类属性(如 species),展示了如何获取与对象及其类相关的信息。



