데코레이터는 말 그대로 함수를 꾸며주는 역할을한다, 데코레이터를 사용하면 함수를 수정하지 않고 특정 동작을 수정하거나 작동 방식을 바꿀 수 있다. 아래에는 코드에서 흔히 볼 수 있는 데코레이터들의 예시를 설명한다.
class BMI:
def __init__(self,weight,height):
self._weight = weight
self._height = height
@property
def height(self):
return self._height
bmi = BMI(80,180)
print(bmi.height) #180
class BMI:
def __init__(self,weight,height):
self._weight = weight
self._height = height
@property
def bmi(self):
return self.weight/(self.height/100)**2
I = BMI(180,80)
print(I.bmi)
class BMI:
def __init__(self,weight,height):
self._weight = weight
self._height = height
@property
def height(self):
return self._height
@height.setter #사용하는 방식이 달라서 오류가 안남
def height(self,h):
#h에 음수나 정수가 아닌 값이 들어오면 종료
assert isinstance(h,int) and h > 0,"잘못된 입력입니다"
self._height = h
bmi = BMI(80,180)
bmi.height = 100
print(bmi.height)