Méthodes de classe et méthodes statiques en Python

PythonPythonBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans une galaxie dominée par l'Empire Planétaire de l'Hégémonie, les royaumes de l'empire prospèrent sous les yeux vigilants des Gardiens du Territoire Impérial. Ces gardiens sont chargés de maintenir l'ordre et d'assurer que les protocoles décidés par l'empire sont respectés. Récemment, les gardiens ont été chargés de déployer et de gérer un réseau de drones de dissimulation pour surveiller les frontières impériales.

En tant qu'équipe de coders recrutés par la Division Technique Impériale, votre objectif est de concevoir le logiciel qui gouverne la flotte de drones. Le point clé de ce laboratoire est d'utiliser les méthodes de classe et les méthodes statiques de Python pour créer un système de contrôle efficace et modulaire. Votre logiciel assurera que les gardiens puissent facilement manipuler les comportements des drones et analyser les données recueillies dans divers secteurs sans dupliquer le code.

Êtes-vous prêt à remplir votre devoir envers l'empire et à démontrer votre loyauté à travers des lignes de code? Commençons.


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{{"Méthodes de classe et méthodes statiques en Python"}} end

Configuration de la classe Drone

Dans cette étape, vous créerez la classe de base Drone dont tous les drones hériteront. Cette classe aura à la fois des méthodes de classe et des méthodes statiques qui géreront les aspects d'initialisation et de gestion globale de la flotte de drones.

Pour commencer, ouvrez un nouveau fichier Python nommé drone.py dans le répertoire ~/project. Placez le code suivant à l'intérieur :

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__":
    ## Exemple d'utilisation
    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}")

Ce code configure une classe Drone avec un initialisateur, une méthode de classe from_serial_number qui crée une nouvelle instance de drone avec une désignation appropriée à l'aide d'un numéro de série, et une méthode statique is_valid_designation qui vérifie si une désignation donnée est valide pour un drone.

Utilisez la commande suivante pour exécuter votre fichier drone.py et voir l'exemple d'utilisation en action :

python ~/project/drone.py

Vous devriez voir une sortie correspondant au code d'exemple d'utilisation dans le bloc __main__ de drone.py :

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

Mise en œuvre du comportement spécifique à une mission

Maintenant, vous allez ajouter une méthode statique liée à une mission pour organiser les drones en fonction de leurs zones désignées. Créez une nouvelle méthode dans la classe Drone appelée assign_zone qui attribue un drone à l'une des zones de sécurité de l'empire en fonction du dernier chiffre de son numéro de série.

Modifiez le fichier drone.py existant pour inclure la nouvelle méthode 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)}")

Exécutez le fichier drone.py mis à jour comme auparavant pour voir le nouveau comportement :

python ~/project/drone.py

L'information ci-dessous devrait être affichée sur votre terminal :

Assigned Zone: Industrial

Sommaire

Dans ce laboratoire, vous avez exploré la manière dont les méthodes de classe et les méthodes statiques peuvent être utilisées dans une classe Python pour créer un système de contrôle modulaire et efficace. En concevant une classe Drone et en pratiquant l'utilisation des fonctionnalités de niveau de classe, vous avez appris à encapsuler à la fois la logique d'instanciation et les fonctions utilitaires qui sont indépendantes des instances de classe.

Grâce à cette expérience pratique, vos compétences en programmation orientée objet ont été affinées, et vous êtes désormais mieux équipé pour écrire du code propre et réutilisable. Espérons que vous vous sentez prêt à défendre les territoires de l'Empire Planétaire de l'Hégémonie avec votre habileté en Python. Rappelez-vous, la force de l'empire n'est que si forte que le code créé par ses développeurs loyaux!