고급 파이썬 개발 과정
챕터
>
레벨
고급 클래스
클래스 다형성
목표
클래스 다형성을 사용하여 처리 준비가 완료되도록 일부 와인 혼합물을 준비하세요.
특정 종류의 특별 와인은 다른 와인보다 더 많은 준비가 필요하며, 혼합되어 적절한 와인으로 숙성되기 전에 추가 재료가 필요합니다. 이를 위해 우리는 클래스 다형성을 사용해야 합니다. 클래스 다형성은 클래스를 사용하여 생성된 객체의 사용을 최적화하는 방법입니다. 이는 서로 다른 클래스에 속하더라도 내부 클래스 함수들이 속성을 공유하여 동일한 방식으로 호출될 수 있도록 합니다.
코드 편집기에서는 네(4)개의 클래스를 설정하게 되며, 각 클래스는 grape, cherry, strawberry, mango라는 네 가지 다른 와인 유형을 포함합니다. 각 클래스는 add()와 take_action()이라는 두 개의 함수를 가지는데, 이 함수들은 동일한 구조를 가지지만 내부 내용은 다를 수 있습니다. 각 클래스의 take_action() 함수에는 추가로 배치할 재료가 채워져야 합니다.
먼저, 라이트 X 표시로 걸어가서 책상 쪽을 바라보며 read() 함수를 사용해 쪽지를 읽습니다. 쪽지에 적힌 정보를 확인하세요. 해당 정보는 각 클래스의 take_action() 함수에 어떤 요소를 추가해야 하는지를 알려줍니다. 예를 들어, grape 클래스에는 아래와 같이 place() 함수를 사용하여 "white oak"를 추가해야 합니다:
# Class for making grape wine
class grape:
def __init__(self,item):
self.name = "grape"
self.item = item
# Adds materials
def add(self):
player.speak("%s are added to the %s mixture." % (self.item, self.name))
# Take actions
def take_action(self):
player.place(self.name)
# New code added
player.place("white oak")
모든 배치할 재료가 클래스 함수에 추가되면, 골드 X 표시로 이동하여 와인 혼합물에 배치할 재료들을 가져옵니다. collect() 함수를 사용하여 ingredients라는 리스트 상수를 가져오고, speak() 함수를 사용하여 내용을 확인하세요.
맵의 하단으로 걸어가서 네(4) 개의 과일 및 베리 가방을 수집하여, 와인 혼합물을 완성하는 데 필요한 구성 요소를 확보하세요.
이제 모든 재료를 수집했으므로, 와인 혼합물을 완성할 모든 재료를 추가할 시간입니다. 클래스 객체를 생성하고 해당 인자를 채워야 하며, 네(4) 개의 객체가 있어야 합니다: grape_mix, cherry_mix, strawberry_mix 및 mango_mix.
각 객체에서 이름에 해당하는 클래스를 설정하고, 수집한 목록에 따라 혼합해야 할 아이템을 추가하세요. grape의 경우 "nothing"이 추가되고, cherry에는 "pure water", strawberry에는 "sugar", 그리고 mango에는 "spice"가 추가됩니다. 예를 들어, 객체는 다음과 같이 정의되어야 합니다: grape_mix = grape("nothing")
객체를 생성한 후에는 클래스 다형성을 활용할 차례입니다. 레드 카펫 아래의 다크 X 표시로 걸어가서 배럴을 바라보고, 코드 편집기에 설정된 루프를 사용하세요. 이 루프를 통해 하단 행의 각 와인 배럴로 이동하면서 혼합물을 완성하는 데 필요한 요소들을 추가할 수 있습니다.
red 카펫에는 strawberry_mix가 필요하고, purple 카펫에는 cherry_mix가 필요하며, green 카펫에는 grape_mix가, orange 카펫에는 mango_mix가 필요합니다. 맵에 나타난 왼쪽부터 오른쪽 순서대로 루프에 요소들을 추가하세요. 예를 들어:
for mix in (strawberry_mix, mango_mix, cherry_mix): mix.add() mix.take_action() player.turn_right() player.move_forward(2) player.turn_left()
예제와 같이 혼합물들은 카펫이 왼쪽부터 오른쪽으로 배치된 순서에 대응되며, 즉 red, orange, purple은 각각 strawberry_mix, mango_mix, cherry_mix에 해당합니다. 순서가 완료되면, 그린 카펫 위의 다크 X 표시로 걸어가서 배럴을 바라보고, 코드 편집기에 설정된 두 번째 루프로 동일한 작업을 수행하세요. 이번에는 맵에 표시된 대로 카펫 색상(green, purple, orange)의 오른쪽에서 왼쪽 순서로 진행하여 레벨을 완료합니다.