고급 파이썬 개발 과정
챕터
>
레벨
데코레이터
체이닝 데코레이터
목표
데코레이터를 체인으로 연결하여 색깔 있는 깃발들로 지붕을 장식하세요.
오랫동안 그 주방 안에 갇혀 있던 후 지붕에는 신선한 공기가 들어왔지만, 몇몇 줄에는 깃발이 없습니다. 여기 있는 동안 깃발들을 설치하는 것이 좋겠지만, 한 줄을 설치하기 위해서는 다양한 깃발이 필요하기 때문에 까다로울 수 있습니다. 이를 데코레이터를 체인으로 연결함으로써 달성할 수 있습니다.
데코레이터는 @ 기호를 두 번 연속 사용하여 체인됩니다. 즉, 하나의 함수에 여러 데코레이터를 적용할 수 있습니다. 예를 들어, 이를 통해 함수 하나를 두 개의 데코레이터 함수 사이에 끼워 넣을 수 있습니다:
# List to add flags to a line
line = []
# Decorator adding a red flag
def red_flag(func):
def add_flag():
line.append("red")
player.speak("Two red flags added to the line")
func()
line.append("red")
return add_flag
# Decorator adding a blue flag
def blue_flag(func):
def add_flag():
line.append("blue")
player.speak("Two blue flags added to the line")
func()
line.append("blue")
return add_flag
# Decorated Function adding line and middle flag
@blue_flag
@red_flag
def middle_green():
line.append("green")
player.speak("A green flag has been added to the line")
위 코드는 체인된 데코레이터가 부착된 함수를 보여주며, 이 데코레이터들은 함수 내부에 꼼꼼히 삽입되어 줄의 양 끝에는 파란 깃발이, 내부에는 빨간 깃발이 배치되고, 마지막으로 중앙에는 녹색 깃발이 배치됩니다. 이 모든 깃발은 line 이라는 리스트에 추가되며, 이것이 줄에 깃발을 설치하는 방법입니다.
황금색 X 표식으로 걸어가서 read() 함수를 사용해 표지판에 적힌 지시사항을 확인하세요. 여기에서는 어떤 위치에 어떤 깃발을 놓아야 하는지 알려줄 것입니다. 깃발은 세 가지 종류로, `
코드북