Property 데코레이터
Coddy Python 여정의 Object Oriented Programming 섹션에 포함된 레슨 — 64개 중 14번째.
프로퍼티 데코레이터를 사용하면 단순한 속성 구문을 유지하면서도 속성에 액세스하고 수정하는 방식을 제어할 수 있습니다.
프로퍼티 게터(property 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에 접근한다는 점에 유의하세요.
값을 설정할 때 데이터를 검증하기 위한 setter를 추가합니다:
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값을 계산하는 계산된 속성(computed properties)을 만듭니다:
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를 사용하세요. 이를 통해 단순한 속성 액세스 구문을 유지하면서 데이터 유효성 검사 및 계산된 값을 처리할 수 있습니다.
챌린지
중급temperature.py 파일에서 섭씨와 화씨 사이를 변환하는 Temperature 클래스를 완성하세요. 그런 다음 driver.py에서 이 클래스를 사용하여 온도 변환을 테스트하세요. 각 파일에 있는 TODO 주석을 따라 단계별 지침을 수행하세요.
치트 시트
프로퍼티 데코레이터(Property decorators)를 사용하면 간단한 속성 구문을 유지하면서 속성에 접근하고 수정하는 방식을 제어할 수 있습니다.
getter 메서드에는 @property를 사용하세요:
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) # 속성처럼 접근하며, 괄호가 필요 없습니다유효성 검사가 포함된 setter 메서드에는 @attribute_name.setter를 사용하세요:
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를 사용합니다값을 계산하는 계산된 프로퍼티(computed properties)를 만듭니다:
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를 계산합니다직접 해보기
# TODO: temperature 모듈에서 Temperature 클래스를 가져오세요
# 클래스 테스트:
# TODO: 25°C의 온도 인스턴스를 생성하세요
temp = None # 실제 Temperature 인스턴스로 교체하세요
# TODO: 섭씨와 화씨 값을 모두 출력하세요
# TODO: "25.0°C is 77.0°F" 형식을 사용하세요
# TODO: 온도를 98.6°F로 설정하세요
# TODO: 변환이 잘 작동하는지 확인하기 위해 두 값을 다시 출력하세요
# TODO: 이전과 동일한 형식을 사용하세요이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.