Métodos de Classe e Métodos Estáticos em Python

PythonBeginner
Pratique Agora

Introdução

Numa galáxia dominada pelo Império Planetário da Hegemonia, os reinos do império florescem sob os olhos vigilantes dos Guardiões do Território Imperial. Estes guardiões são responsáveis por manter a ordem e garantir que os protocolos decretados pelo império sejam cumpridos. Recentemente, os guardiões foram encarregados de implantar e gerenciar uma rede de drones furtivos para monitorar as fronteiras imperiais.

Como uma equipe de codificadores recrutados pela Divisão de Tecnologia Imperial, seu objetivo é projetar o software que governa a frota de drones. O foco principal deste laboratório é utilizar os métodos de classe e métodos estáticos do Python para criar um sistema de controle que seja eficiente e modular. Seu software garantirá que os guardiões possam manipular facilmente os comportamentos dos drones e analisar os dados coletados em vários setores sem duplicar código.

Você está pronto para cumprir seu dever para com o império e demonstrar sua lealdade através de linhas de código? Vamos começar.

Configurando a Classe Drone

Nesta etapa, você criará a classe Drone fundamental da qual todos os drones herdarão. Esta classe terá métodos de classe e métodos estáticos que lidarão com a inicialização e os aspectos de gerenciamento global da frota de drones.

Para começar, abra um novo arquivo Python chamado drone.py no diretório ~/project. Coloque o seguinte 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 uma classe Drone com um inicializador, um método de classe from_serial_number que cria uma nova instância de drone com uma designação adequada usando um número de série, e um método estático is_valid_designation que verifica se uma determinada designação é válida para um drone.

Use o seguinte comando para executar seu arquivo drone.py e ver o uso de exemplo em ação:

python ~/project/drone.py

Você deve ver uma saída que corresponde ao código de uso de exemplo dentro do bloco __main__ de drone.py:

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

Implementando Comportamento Específico da Missão

Agora, você adicionará um método estático relacionado à missão para organizar os drones com base em suas zonas designadas. Crie um novo método dentro da classe Drone chamado assign_zone que atribui um drone a uma das zonas de segurança do império com base no último dígito de seu número de série.

Modifique o arquivo drone.py existente para incluir o novo 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": "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)}")

Execute o drone.py atualizado como antes para ver o novo comportamento:

python ~/project/drone.py

A informação abaixo deve ser exibida no seu terminal:

Assigned Zone: Industrial

Resumo

Neste laboratório, você explorou como métodos de classe e métodos estáticos podem ser empregados dentro de uma classe Python para criar um sistema de controle modular e eficiente. Ao projetar uma classe Drone e praticar o uso da funcionalidade em nível de classe, você aprendeu como encapsular tanto a lógica de instanciação quanto as funções utilitárias que são independentes das instâncias da classe.

Através desta experiência prática, suas habilidades em programação orientada a objetos foram aprimoradas, e você agora está mais equipado para escrever código limpo e reutilizável. Esperamos que você se sinta preparado para defender os territórios do Império Planetário da Hegemonia com sua proeza em Python. Lembre-se, o poder do império é tão forte quanto o código criado por seus desenvolvedores leais!