Python 类方法和静态方法

PythonPythonBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

在由霸权星球帝国统治的星系中,帝国的各个领域在帝国领土守护者的密切注视下繁荣发展。这些守护者负责维护秩序,并确保帝国颁布的协议得到遵守。最近,守护者们接到任务,要部署和管理一个隐形无人机网络,以监控帝国边境。

作为帝国科技部门征召的一组程序员,你的目标是设计管理无人机机队的软件。本次实验的关键重点是利用 Python 的类方法和静态方法来创建一个高效且模块化的控制系统。你的软件将确保守护者能够轻松操控无人机行为,并分析各个区域收集到的数据,而无需重复编写代码。

你准备好为帝国履行职责,并通过代码展现你的忠诚了吗?让我们开始吧。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL python(("Python")) -.-> python/ObjectOrientedProgrammingGroup(["Object-Oriented Programming"]) python/ObjectOrientedProgrammingGroup -.-> python/class_static_methods("Class Methods and Static Methods") subgraph Lab Skills python/class_static_methods -.-> lab-271527{{"Python 类方法和静态方法"}} end

设置无人机类

在这一步中,你将创建所有无人机都将继承的基础 Drone 类。这个类将同时拥有类方法和静态方法,用于处理无人机机队的初始化和全局管理方面。

首先,请在 ~/project 目录中打开一个名为 drone.py 的新 Python 文件。将以下代码放入其中:

class Drone:
    fleet_count = 0

    def __init__(self, designation):
        self.designation = designation
        Drone.fleet_count += 1

    @classmethod
    def from_serial_number(cls, serial_number):
        designation = f"Drone-{serial_number}"
        return cls(designation)

    @staticmethod
    def is_valid_designation(designation):
        return designation.startswith("Drone-")

if __name__ == "__main__":
    ## 示例用法
    standard_drone = Drone.from_serial_number("SN123")
    print(f"Designation: {standard_drone.designation}")
    print(f"Is valid designation: {Drone.is_valid_designation(standard_drone.designation)}")
    print(f"Fleet count: {Drone.fleet_count}")

这段代码设置了一个 Drone 类,其中包含一个初始化器、一个类方法 from_serial_number,该方法使用序列号创建一个具有正确标识的新无人机实例,以及一个静态方法 is_valid_designation,用于检查给定的标识对于无人机是否有效。

使用以下命令运行你的 drone.py 文件,并查看 drone.py__main__ 块中的示例用法:

python ~/project/drone.py

你应该会看到与 drone.py__main__ 块中的示例用法代码相对应的输出:

Designation: Drone-SN123
Is valid designation: True
Fleet count: 1

实现特定任务行为

现在,你将添加一个与任务相关的静态方法,以便根据无人机的指定区域来组织它们。在 Drone 类中创建一个名为 assign_zone 的新方法,该方法根据序列号的最后一位数字将无人机分配到帝国的一个安全区域。

修改现有的 drone.py 文件,以包含新的 assign_zone 方法:

class Drone:
    fleet_count = 0

    def __init__(self, designation):
        self.designation = designation
        Drone.fleet_count += 1

    @classmethod
    def from_serial_number(cls, serial_number):
        designation = f"Drone-{serial_number}"
        return cls(designation)

    @staticmethod
    def is_valid_designation(designation):
        return designation.startswith("Drone-")

    @staticmethod
    def assign_zone(serial_number):
        zone_mapping = {
            "1": "Residential",
            "2": "Commercial",
            "3": "Industrial",
            "4": "Agricultural"
        }
        return zone_mapping.get(serial_number[-1], "Undefined")


if __name__ == "__main__":
    standard_drone = Drone.from_serial_number("SN123")
    print(f"Assigned Zone: {Drone.assign_zone(standard_drone.designation)}")

像之前一样运行更新后的 drone.py,以查看新行为:

python ~/project/drone.py

你的终端上应该会显示以下信息:

Assigned Zone: Industrial

总结

在本次实验中,你探索了如何在 Python 类中使用类方法和静态方法来创建一个模块化且高效的控制系统。通过设计一个 Drone 类并实践使用类级别的功能,你学会了如何封装实例化逻辑和与类实例无关的实用函数。

通过这次实践经验,你在面向对象编程方面的技能得到了提升,现在你更有能力编写简洁、可复用的代码。希望你已准备好用你的 Python 技能来保卫霸权星球帝国的领土。记住,帝国的力量与它忠诚的开发者所编写的代码一样强大!