PYTHON · 객체지향
프로퍼티 (getter/setter)
@property로 속성 접근을 메서드로 제어하여 유효성 검사, 계산된 속성 등을 구현합니다.
객체지향중급property프로퍼티gettersetter
핵심 설명
@property로 속성 접근을 메서드로 제어하여 유효성 검사, 계산된 속성 등을 구현합니다.
Python code
class Temperature:
def __init__(self, celsius: float = 0):
self.celsius = celsius # setter 호출
@property
def celsius(self) -> float:
return self._celsius
@celsius.setter
def celsius(self, value: float):
if value < -273.15:
raise ValueError("절대영도 이하 불가")
self._celsius = value
@property
def fahrenheit(self) -> float:
return self._celsius * 9/5 + 32
@fahrenheit.setter
def fahrenheit(self, value: float):
self.celsius = (value - 32) * 5/9
def __repr__(self):
return f"Temperature({self._celsius}°C / {self.fahrenheit}°F)"
t = Temperature(100)
print(t) # Temperature(100°C / 212.0°F)
t.fahrenheit = 72
print(f"{t.celsius:.1f}°C") # 22.2°C
# 읽기 전용 프로퍼티
class Circle:
def __init__(self, radius):
self._radius = radius
@property
def area(self):
return 3.14159 * self._radius ** 2
c = Circle(5)
print(f"면적: {c.area:.2f}")
# c.area = 100 # AttributeError학습 팁
@property는 API를 변경하지 않고 단순 속성을 계산된 속성으로 전환할 수 있어 하위 호환성을 유지합니다.
주의할 점
__init__에서 self.celsius = value는 setter를 호출하지만, self._celsius = value는 직접 할당입니다. 의도를 명확히 하세요.
자주 묻는 질문
프로퍼티 (getter/setter)란 무엇인가요?
@property 로 속성 접근을 메서드로 제어하여 유효성 검사, 계산된 속성 등을 구현합니다.
프로퍼티 (getter/setter) 학습 시 주의할 점은 무엇인가요?
__init__ 에서 self.celsius = value 는 setter를 호출하지만, self._celsius = value 는 직접 할당입니다. 의도를 명확히 하세요.
Continue Learning
Python 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.