介绍
欢迎来到 2100 年,此时人类已迈向星辰,在宇宙中建立了繁荣的太空城市。在这个未来场景中,你是一名开拓性的太空城市建筑师,负责创造创新解决方案,以适应这些天体都市不断演变的需求。
作为负责设计太空城市坚固基石的建筑师,你需要运用多态性这一先进概念。这一编程原则将使你的作品能够使用通用接口与各种太空城市系统无缝交互和通信,尽管它们存在潜在差异。
你在这个实验中的目标是利用 Python 多态性的力量,为城市的基础设施组件创建灵活且可维护的代码。通过这样做,你将确保城市在未来几个世纪的发展和适应性。准备好站在太空城市发展的前沿吧,建筑师!
理解 Python 中的多态性
在这一步中,你将探索 Python 多态性的基础知识。多态性使我们能够在子类中定义与父类中同名的方法。这样一来,子类继承了父类的属性和行为。然而,如果你需要进行某些调整或添加,多态性允许在不改变父类结构的情况下进行更改。
首先创建一个基类,该基类表示与不同城市系统模块进行交互的接口。
接下来,将以下内容添加到你的 ~/project/infrastructure.py 中:
## infrastructure.py
class CitySystem:
def power_on(self):
raise NotImplementedError("Subclass must implement this abstract method")
class TransportationSystem(CitySystem):
def power_on(self):
print("Transportation System is now activated.")
class WasteManagementSystem(CitySystem):
def power_on(self):
print("Waste Management System is now activated.")
## This function represents the city initialization sequence
def initiate_city_systems(systems):
for system in systems:
system.power_on()
## Let’s see polymorphism in action
if __name__ == "__main__":
city_systems = [TransportationSystem(), WasteManagementSystem()]
initiate_city_systems(city_systems)
要测试系统是否通过多态性正确启动,请运行以下命令:
python3 ~/project/infrastructure.py
你应该会看到输出,表明运输系统和废物管理系统都已激活:
Transportation System is now activated.
Waste Management System is now activated.
添加新系统
既然你已经了解了多态性的工作原理,现在是时候扩展我们太空城市的功能了。你的任务是添加一个新的资源分配系统,同时不破坏现有的代码库。
在同一个 infrastructure.py 文件中,添加一个名为 ResourceAllocationSystem 的新类,它有自己的 power_on 方法,在激活时打印一条独特的消息。
class ResourceAllocationSystem(CitySystem):
def power_on(self):
print("Resource Allocation System is now activated.")
别忘了更新 city_systems 数组,并包含新创建的 ResourceAllocationSystem 的一个实例,然后测试初始化序列。最后一步是执行脚本:
python3 ~/project/infrastructure.py
你的终端上应该会显示以下信息:
Transportation System is now activated.
Waste Management System is now activated.
Resource Allocation System is now activated.
总结
在这个实验中,我们踏入了 Python 多态性的领域,发现它在为诸如未来太空城市基础设施这样的复杂应用创建通用且可维护的代码结构方面发挥着至关重要的作用。我们从基本概念入手,通过为不同系统设计通用的启动序列进行实践,然后借助多态性无缝集成新系统,从而扩展了我们城市的功能。
通过运用 Python 的面向对象特性,我们提升了作为开发者和太空城市建筑师的技能,为能够经受星际时间考验的模块化、适应性强的软件奠定了基础。



