Métodos de clase y métodos estáticos en Python

PythonPythonBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En una galaxia dominada por el Imperio Planetario de la Hegemonía, los reinos del imperio prosperan bajo la vigilancia de los Guardianes del Territorio Imperial. Estos guardianes se encargan de mantener el orden y de garantizar que se cumplan los protocolos dictados por el imperio. Recientemente, los guardianes se han visto encomendado el trabajo de desplegar y gestionar una red de drones sigilosos para monitorear las fronteras imperiales.

Como equipo de programadores contratados por la División Técnica Imperial, tu objetivo es diseñar el software que gobierna la flota de drones. El enfoque principal de este laboratorio es utilizar los métodos de clase y los métodos estáticos de Python para crear un sistema de control eficiente y modular. Tu software garantizará que los guardianes puedan manipular fácilmente el comportamiento de los drones y analizar los datos recolectados en varios sectores sin duplicar código.

¿Estás listo para cumplir con tu deber hacia el imperio y demostrar tu lealtad a través de líneas de código? Comencemos.


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étodos de clase y métodos estáticos en Python"}} end

Configurando la clase Drone

En este paso, crearás la clase base Drone de la que todos los drones heredarán. Esta clase tendrá tanto métodos de clase como métodos estáticos que manejarán los aspectos de inicialización y gestión global de la flota de drones.

Para comenzar, abre un nuevo archivo de Python llamado drone.py en el directorio ~/project. Coloca el siguiente código dentro:

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__":
    ## Example usage
    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}")

Este código configura una clase Drone con un inicializador, un método de clase from_serial_number que crea una nueva instancia de drone con una denominación adecuada utilizando un número de serie y un método estático is_valid_designation que comprueba si una denominación dada es válida para un drone.

Utiliza el siguiente comando para ejecutar tu archivo drone.py y ver la utilización de ejemplo en acción:

python ~/project/drone.py

Deberías ver una salida que corresponda al código de uso de ejemplo dentro del bloque __main__ de drone.py:

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

Implementando el comportamiento específico de la misión

Ahora, agregará un método estático relacionado con la misión para organizar los drones según sus zonas designadas. Cree un nuevo método dentro de la clase Drone llamado assign_zone que asigne un dron a una de las zonas de seguridad del imperio según el último dígito de su número de serie.

Modifique el archivo drone.py existente para incluir el nuevo método 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": "Residencial",
            "2": "Comercial",
            "3": "Industrial",
            "4": "Agricola"
        }
        return zone_mapping.get(serial_number[-1], "No definido")


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

Ejecute el archivo drone.py actualizado como antes para ver el nuevo comportamiento:

python ~/project/drone.py

La información siguiente debe aparecer en su terminal:

Zona asignada: Industrial

Resumen

En este laboratorio, exploraste cómo se pueden emplear métodos de clase y métodos estáticos dentro de una clase de Python para crear un sistema de control modular y eficiente. Al diseñar una clase Drone y practicar el uso de funcionalidad de nivel de clase, has aprendido cómo encapsular tanto la lógica de instanciación como las funciones de utilidad que son independientes de las instancias de clase.

A través de esta experiencia práctica, tus habilidades en programación orientada a objetos se han afilado, y ahora estás más capacitado para escribir código limpio y reutilizable. Esperamos que te sientas preparado para defender los territorios del Imperio Planetario de la Hegemonía con tu destreza en Python. Recuerda, el poder del imperio solo es tan fuerte como el código creado por sus leales desarrolladores.