Menu
CoddyTech

Property 데코레이터

Coddy Python 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 64개 중 14번째.

프로퍼티 데코레이터를 사용하면 간단한 속성 구문을 유지하면서 속성에 접근하고 수정하는 방식을 제어할 수 있습니다.

속성 getter가 있는 클래스의 예입니다:

class Person:
    def __init__(self, name, age):
        self._name = name
        self._age = age
    
    @property
    def age(self):
        return self._age

속성을 일반적인 특성처럼 사용하세요:

person = Person("Alice", 30)
print(person.age)

출력:

30

실제로는 메서드를 호출하는 것이지만, 괄호 없이 age에 접근한다는 점에 주목하세요.

값을 설정할 때 데이터를 검증하는 세터를 추가하세요:

class Person:
    def __init__(self, name, age):
        self._name = name
        self._age = age
    
    @property
    def age(self):
        return self._age
    
    @age.setter
    def age(self, value):
        if value < 0:
            raise ValueError("Age cannot be negative")
        self._age = value

이제 자동 유효성 검사를 통해 나이를 설정할 수 있습니다:

person = Person("Alice", 30)
person.age = 31     # 유효성 검사를 수행하는 setter를 사용함
print(person.age)   # getter를 사용함

# 이 코드는 오류를 발생시킴:
# person.age = -5   # ValueError: 나이는 음수일 수 없음

출력:

31

값을 계산하는 계산된 속성을 만드세요:

class Rectangle:
    def __init__(self, width, height):
        self.width = width
        self.height = height
    
    @property
    def area(self):
        return self.width * self.height

rect = Rectangle(5, 3)
print(rect.area)  # 5 * 3 = 15를 계산합니다

출력:

15

핵심 요점: 프로퍼티 데코레이터를 사용하면 메서드가 속성처럼 보입니다. getter에는 @property를, setter에는 @attribute_name.setter를 사용하세요. 이렇게 하면 간단한 속성 접근 문법을 유지하면서 데이터 검증과 계산된 값을 사용할 수 있습니다.

challenge icon

챌린지

중급

섭씨와 화씨 간 변환을 수행하는 temperature.py의 Temperature 클래스를 완성하세요. 그런 다음 이 클래스를 driver.py에서 사용하여 온도 변환을 테스트하세요. 두 파일의 TODO 주석에 있는 단계별 지침을 따르세요.

각 변환을 [celsius]°C is [fahrenheit]°F 형식으로 출력하세요. 섭씨 값은 입력된 그대로, 화씨 값은 Python이 계산한 그대로 표시해야 합니다. 숫자를 반올림하거나 형식을 지정하지 마세요. driver가 출력하는 두 줄은 다음과 같습니다.

25°C is 77.0°F
37.0°C is 98.6°F

직접 해보기

# TODO: temperature 모듈에서 Temperature 클래스를 가져오세요

# 클래스를 테스트하세요:
# TODO: 25°C인 Temperature 인스턴스를 생성하세요
temp = None  # 실제 Temperature 인스턴스로 바꾸세요

# TODO: Celsius와 Fahrenheit 값을 모두 출력하세요
# TODO: "25°C is 77.0°F" 형식을 사용하세요 (반올림하거나 형식을 변경하지 말고 두 값을 그대로 출력하세요)

# TODO: 온도를 98.6°F로 설정하세요

# TODO: 변환이 제대로 작동하는지 확인하기 위해 두 값을 다시 출력하세요
# TODO: 이전과 같은 형식을 사용하세요
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: 온라인 Python 컴파일러