고급 파이썬 개발 과정
챕터
>
레벨
수학 모듈
코드 인트로스펙션
목표
코드 인트로스펙션을 사용하여 다락방에 보관된 오래된 아이템들이 무엇이며 어떻게 사용되는지 조사합니다.
다락방에는 거의 사용되지 않는 사무실이 있으며, 오랫동안 잊혀진 귀중품이 들어 있는 몇 개의 오래된 상자들이 있습니다. 별도의 설명이 없거나 메모에 정보가 제공되지 않는 한, 때때로 현장에서 수집된 아이템이나 상수를 식별하는 것이 꽤 어려울 수 있습니다. 뿐만 아니라 특정 객체로 수행할 수 있는 작업 범위나 그 속성을 식별하는 것도 어려울 수 있습니다. 이를 해결하기 위해 코드 인트로스펙션을 사용할 수 있습니다.
코드 인트로스펙션은 코드의 특정 부분을 조사하고 해당 속성을 파악할 수 있게 해줍니다. 이를 위해, 기본 파이썬 코드에 내장된 네(4) 개의 인트로스펙션 함수인 type() , id() , repr() , dir() 및 help()를 사용할 것입니다. 이 함수들은 다음과 같이 작동합니다:
type(): 이 함수는 전달한 인자의 객체가 어떤 타입인지 알려줍니다. 예를 들어, 변수를 인자로 전달하면 해당 객체가 변수임을 식별합니다.id(): 파이썬에서 생성된 모든 객체는 코드 내에서 객체를 구분할 수 있는 고유한 id를 가지고 있습니다. 이 함수에 객체를 인자로 전달하면 해당 객체의 고유 id를 반환합니다.repr(): 문자열이 아닌 값을 문자열로 변환해주어, 데이터를 읽기 쉬운 형태로 만들어줍니다.dir(): 해당 객체가 가진 모든 속성을 표시해주어, 특정 객체 타입으로 무엇을 할 수 있는지 알 수 있게 해줍니다.help(): 파이썬 레지스트리에 등록된 객체, 함수, 클래스 등에 관한 모든 정보를 표시해줍니다.
또한, 새 비동기 함수인 display() 함수가 있습니다. 이 함수는 read() 함수와 유사하지만, 코드 인트로스펙션 함수처럼 동적 데이터를 표시할 수 있습니다. 구문은 다음과 같습니다: await player.display( -data-). 이 모든 함수들은 데이터를 분석하는 데 유용하며, 이는 새로운 메서드를 가져오거나 특정 코드의 속성을 식별할 때 유용합니다.
이 함수들을 사용하여 다락방에 보관된 아이템들을 식별하고 분류할 것입니다. 우선, 빨간 카펫 위에 있는 X 표시부터 시작해, 색깔 카펫 위에 있는 어두운 X 표시로 걸어가세요. 이 구역에는 세(3) 개의 상수가 있습니다: red_container , green_container , blue_container . 이 상수들은 각각 색깔 카펫에 해당하는 상자에 들어 있는 컨테이너를 나타냅니다.
각 X 표시마다 상자를 향해 서서 open() 함수를 사용해 상자를 열고, 해당 색상의 상수와 함께 collect() 함수를 사용해 상자에서 아이템을 가져오세요. type() 인트로스펙션 함수를 사용하여 상자 안의 상수가 어떤 타입인지 식별합니다. 이 함수가 출력하는 값은 원시 데이터이므로, repr() 함수를 사용하여 문자열로 변환합니다. 그리고 함수와 상수를 결합한 결과 문자열을 표시하기 위해 speak() 함수를 사용하세요. 예를 들어: player.speak(repr(type(red_container))). 그 후에 speak() 함수를 사용해 상수 자체를 표시하여 내용물을 직접 식별합니다. 예: player.speak(red_container).
세(3) 개의 상수를 모두 수집, 인트로스펙션, 식별한 후, 책상 앞의 밝은 X 표시로 걸어가세요. item_id_red , item_id_green , item_id_blue 라는 이름의 세 변수를 생성하세요. 이 변수들은 수집한 각 상수의 id 번호를 저장하는 데 사용됩니다. id() 인트로스펙션 함수를 사용하여 상수의 고유 식별 번호를 가져오고, 이를 변수에 할당하세요. 예를 들어: item_id_red = id(red_container) . 이 작업을 세(3) 개의 변수와 상수에 대해 수행합니다.
모든 세(3) 개의 변수가 채워지면, 이들을 모두 item_list라는 이름의 리스트에 저장하고, 책상 위 메모에 기록되었는지 확인하기 위해 밝은 X 표시에서 display() 함수를 사용하세요. 예: await player.display(item_list).
이제 리스트가 기록되었으므로, 보라색 카펫 위의 어두운 X 표시로 걸어가 책상을 마주하세요. 여기서 dir() 함수를 사용해 리스트의 속성을 확인할 것입니다. 하지만 출력 값은 원시 데이터이므로 표시하기 까다로울 수 있습니다. 이를 위해 repr() 함수를 사용해 데이터를 읽기 쉬운 문자열로 변환합니다. item_attributes라는 변수를 생성하여 결과 문자열을 저장하세요. 예: item_attributes = repr(dir(item_list)). 마지막으로 display() 함수를 사용해 이것이 테이블 위 메모에 기록되었는지 확인합니다.
흰색 카펫 위의 어두운 X 표시로 걸어가, 앞서 dir()으로 한 것과 같이 이번에는 help() 함수를 사용해 객체에 대한 모든 문서 사용법을 개요로 확인하세요. item_help라는 변수를 생성하여 결과 문자열을 저장하세요. 예: item_help = repr(help(item_list)). 마지막으로 read() 함수를 사용하여 이것이 테이블 위 메모에 기록되었는지 확인함으로써 레벨을 완료합니다.