简介
在这个实验中,你将探索 Python 中的类和实例,并学习如何检查一个对象是否是某个类的实例。你将首先创建一个带有类属性和实例属性的 Dog
类,然后创建 Dog
类的实例并访问它们的属性。
接着,你将学习使用 isinstance()
进行类型检查,并将其与 type()
进行精确匹配比较。这将使你能够确定一个对象是否属于某个特定类或该类的子类,从而更深入地理解 Python 中的面向对象编程。
在这个实验中,你将探索 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
),展示了如何获取与对象及其类相关的信息。