Python 클래스 메서드 및 정적 메서드

PythonBeginner
지금 연습하기

소개

헤게모니 행성 제국이 지배하는 은하계에서, 제국의 영역은 제국 영토 수호자들의 세심한 감시 아래 번성합니다. 이 수호자들은 질서를 유지하고 제국의 명령 프로토콜이 준수되도록 하는 책임을 맡고 있습니다. 최근, 수호자들은 제국 국경을 감시하기 위해 스텔스 드론 네트워크를 배치하고 관리하는 임무를 받았습니다.

제국 기술 부서에 의해 차출된 코더 팀으로서, 여러분의 목표는 드론 함대를 제어하는 소프트웨어를 설계하는 것입니다. 이 랩의 핵심 초점은 Python 의 클래스 메서드와 정적 메서드를 활용하여 효율적이고 모듈화된 제어 시스템을 만드는 것입니다. 여러분의 소프트웨어는 수호자들이 코드 중복 없이 다양한 구역에서 수집된 데이터를 분석하고 드론의 동작을 쉽게 조작할 수 있도록 보장할 것입니다.

제국에 대한 의무를 다하고 코드 라인을 통해 충성을 보여줄 준비가 되셨습니까? 시작해 봅시다.

Drone 클래스 설정

이 단계에서는 모든 드론이 상속받을 기본 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__":
    ## 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}")

이 코드는 초기자 (initializer), 일련 번호를 사용하여 적절한 지정을 가진 새로운 드론 인스턴스를 생성하는 클래스 메서드 from_serial_number, 그리고 주어진 지정이 드론에 유효한지 확인하는 정적 메서드 is_valid_designation을 가진 Drone 클래스를 설정합니다.

다음 명령을 사용하여 drone.py 파일을 실행하고 __main__ 블록 내의 예제 사용법을 확인하세요:

python ~/project/drone.py

drone.py__main__ 블록 내의 예제 사용 코드에 해당하는 출력을 볼 수 있습니다:

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

임무별 동작 구현

이제, 지정된 구역을 기반으로 드론을 정리하기 위해 임무 관련 정적 메서드를 추가합니다. Drone 클래스 내에 드론을 일련 번호의 마지막 숫자를 기반으로 제국의 보안 구역 중 하나에 할당하는 assign_zone이라는 새 메서드를 생성합니다.

새로운 assign_zone 메서드를 포함하도록 기존 drone.py 파일을 수정합니다:

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 실력으로 헤게모니 행성 제국의 영토를 방어할 준비가 되었다고 느끼시길 바랍니다. 기억하세요, 제국의 힘은 충성스러운 개발자가 만든 코드만큼 강합니다!