简介
在这个实验中,你将学习如何在 Python 中检查一个类是否是另一个类的子类。这涉及探索类继承,这是面向对象编程中的一个基本概念。
你将首先创建一个父类 Animal
,它包含一个构造函数和一个 speak
方法。然后,你将创建从 Animal
类继承的子类 Dog
和 Cat
,并覆盖 speak
方法。最后,你将学习如何使用 issubclass()
函数并检查 __bases__
属性来确定子类关系。
在这个实验中,你将学习如何在 Python 中检查一个类是否是另一个类的子类。这涉及探索类继承,这是面向对象编程中的一个基本概念。
你将首先创建一个父类 Animal
,它包含一个构造函数和一个 speak
方法。然后,你将创建从 Animal
类继承的子类 Dog
和 Cat
,并覆盖 speak
方法。最后,你将学习如何使用 issubclass()
函数并检查 __bases__
属性来确定子类关系。
在这一步中,你将学习类继承,这是面向对象编程(OOP)中的一个基本概念。继承允许你创建新的类(子类),这些类可以从现有的类(父类)继承属性和方法。这有助于促进代码复用,并有助于构建更有条理、更易于维护的代码。
让我们从创建一个名为 Animal
的简单父类开始:
## Create a file named animal.py in the ~/project directory
class Animal:
def __init__(self, name):
self.name = name
def speak(self):
print("Generic animal sound")
打开你的 VS Code 编辑器,在 ~/project
目录下创建一个名为 animal.py
的新文件。将上述代码复制并粘贴到该文件中。这个类有一个 __init__
方法(构造函数),用于初始化 name
属性,还有一个 speak
方法,用于打印通用的动物叫声。
现在,让我们创建一个名为 Dog
的子类,它继承自 Animal
类:
## Add the following code to animal.py
class Dog(Animal):
def speak(self):
print("Woof!")
将上述代码添加到 animal.py
文件中。Dog
类通过在类名后面的括号中指定 Animal
来继承自 Animal
类。Dog
类还重写了 speak
方法,以提供自己的特定实现。
接下来,让我们创建另一个名为 Cat
的子类,它同样继承自 Animal
类:
## Add the following code to animal.py
class Cat(Animal):
def speak(self):
print("Meow!")
将上述代码添加到 animal.py
文件中。Cat
类也继承自 Animal
类,并重写了 speak
方法。
现在,让我们创建一个主程序来使用这些类:
## Create a file named main.py in the ~/project directory
from animal import Animal, Dog, Cat
animal = Animal("Generic Animal")
dog = Dog("Buddy")
cat = Cat("Whiskers")
animal.speak()
dog.speak()
cat.speak()
在 ~/project
目录下创建一个名为 main.py
的新文件,并将上述代码复制并粘贴到该文件中。这个程序从 animal.py
文件中导入 Animal
、Dog
和 Cat
类。然后,它创建每个类的实例并调用它们的 speak
方法。
要运行这个程序,在 VS Code 中打开终端并导航到 ~/project
目录:
cd ~/project
然后,使用 Python 命令执行 main.py
脚本:
python main.py
你应该会看到以下输出:
Generic animal sound
Woof!
Meow!
这展示了 Dog
和 Cat
类如何从 Animal
类继承,并为 speak
方法提供自己的特定实现。这是 Python 中类继承的一个基本示例。
issubclass()
函数在这一步中,你将学习如何使用 issubclass()
函数来检查一个类是否是另一个类的子类。这是 Python 的一个内置函数,如果第一个参数是第二个参数的子类,则返回 True
,否则返回 False
。
继续上一步的示例,让我们使用 issubclass()
函数来检查 Animal
、Dog
和 Cat
类之间的关系。
打开你的 VS Code 编辑器,在 ~/project
目录下创建一个名为 issubclass_example.py
的新文件。将以下代码复制并粘贴到该文件中:
## Create a file named issubclass_example.py in the ~/project directory
from animal import Animal, Dog, Cat
print(issubclass(Dog, Animal))
print(issubclass(Cat, Animal))
print(issubclass(Dog, Cat))
print(issubclass(Animal, Dog))
print(issubclass(Animal, Animal))
这个程序从你在上一步创建的 animal.py
文件中导入 Animal
、Dog
和 Cat
类。然后,它使用 issubclass()
函数来检查以下关系:
Dog
是 Animal
的子类吗?Cat
是 Animal
的子类吗?Dog
是 Cat
的子类吗?Animal
是 Dog
的子类吗?Animal
是其自身的子类吗?要运行这个程序,在 VS Code 中打开终端并导航到 ~/project
目录:
cd ~/project
然后,使用 Python 命令执行 issubclass_example.py
脚本:
python issubclass_example.py
你应该会看到以下输出:
True
True
False
False
True
这个输出表明:
Dog
是 Animal
的子类(True)Cat
是 Animal
的子类(True)Dog
不是 Cat
的子类(False)Animal
不是 Dog
的子类(False)Animal
是其自身的子类(True)issubclass()
函数对于检查代码中类之间的继承关系很有用。这有助于确保代码按预期运行,并编写更健壮、更易于维护的代码。
__bases__
属性在这一步中,你将学习如何检查类的 __bases__
属性,以找出其直接父类。__bases__
属性是一个元组,其中包含了该类的父类。
继续上几步的示例,让我们来检查 Animal
、Dog
和 Cat
类的 __bases__
属性。
打开你的 VS Code 编辑器,在 ~/project
目录下创建一个名为 bases_example.py
的新文件。将以下代码复制并粘贴到该文件中:
## Create a file named bases_example.py in the ~/project directory
from animal import Animal, Dog, Cat
print(Dog.__bases__)
print(Cat.__bases__)
print(Animal.__bases__)
这个程序从你之前步骤中创建的 animal.py
文件中导入 Animal
、Dog
和 Cat
类。然后,它会打印出每个类的 __bases__
属性。
要运行这个程序,在 VS Code 中打开终端并导航到 ~/project
目录:
cd ~/project
然后,使用 Python 命令执行 bases_example.py
脚本:
python bases_example.py
你应该会看到以下输出:
(<class 'animal.Animal'>,)
(<class 'animal.Animal'>,)
(<class 'object'>,)
这个输出表明:
Dog
类继承自 Animal
类。Cat
类继承自 Animal
类。Animal
类继承自 object
类,object
类是 Python 中所有类的基类。__bases__
属性对于理解类的继承层次结构很有用。这有助于调试和编写更易于维护的代码。
在这个实验中,你探索了 Python 中的类继承,这是面向对象编程中的一个关键概念。你创建了一个父类 Animal
,它包含一个构造函数和一个 speak
方法,然后定义了从 Animal
继承的子类 Dog
和 Cat
。
这些子类重写了 speak
方法,以提供它们自己的特定实现,展示了继承如何实现代码复用和专业化。最后,你创建了这些类的实例,并调用它们的 speak
方法,以观察不同的输出。