Методы класса и статические методы в Python

PythonBeginner
Практиковаться сейчас

Введение

В галактике, контролируемой Империйским Планетарным Империем, области империи процветают под присмотром Гвардии Императорских Территорий. Эти охранники отвечают за поддержание порядка и гарантируют соблюдение приказах империи. Недавно охранникам поручено развернуть и управлять сетью скрытых дронов для наблюдения заperialными границами.

Ваша задача - команда программистов, нанятых Империйским Техническим Отделом, разработать программное обеспечение для управления флотом дронов. Основная цель этого лабораторного занятия - использовать методы и статические методы классов Python для создания控制系统,который будет эффективным и модульным. Ваше программное обеспечение обеспечит возможность легко управлять поведением дронов и анализировать собранные данные из различных секторов, не дублируя код.

Готовы ли вы выполнить свою обязанность перед империей и показать свою верность с помощью строк кода? Давайте начнем.

Настройка класса дрона

В этом шаге вы создадите базовый класс Drone, от которого будут наследоваться все дроны. Этот класс будет иметь как методы класса, так и статические методы, которые будут обрабатывать инициализацию и глобальное управление флотом дронов.

Для начала откройте новый файл Python под названием drone.py в директории ~/project. Вставьте в него следующий код:

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}")

Этот код настраивает класс Drone с инициализатором, методом класса from_serial_number, который создает новый экземпляр дрона с правильным обозначением, используя серийный номер, и статическим методом is_valid_designation, который проверяет, является ли данное обозначение допустимым для дрона.

Используйте следующую команду, чтобы запустить файл drone.py и увидеть пример использования в действии:

python ~/project/drone.py

Вы должны увидеть вывод, соответствующий коду примера использования в блоке __main__ файла drone.py:

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. Помните, сила империи столько же велика, сколько и код, созданный ее преданных разработчиков!