실행결과를 보니 은폐가 제대로 설정됐네요. 그러면 다른 전투기도 은폐 여부를 확인할 수 있을까요? 다른 전투기는 stealth1이었으니 앞에서와 같은 방식으로 코드를 작성한 후 실행해 보겠습니다.
if stealth1.cloaking == True: # 다른 전투기의 은폐 여부
print("{0}는 현재 은폐 상태입니다.".format(stealth1.name))
실행결과 |
AttributeError: 'Unit' object has no attribute 'cloaking' |
실행하니 오류가 발생하는군요. 그렇습니다. Unit 클래스에는 처음과 변함없이 name, hp, damage라는 3개의 인스턴스 변수만 있고 cloaking은 없습니다. 그런데 stealth1에서 클래스에 정의하지 않은 cloaking 변수에 접근하니 오류가 발생한 것이죠.
stealth2는 클래스 외부에서 직접 cloaking이라는 인스턴스 변수를 정의했습니다. 이는 Unit 클래스의 모든 객체가 아닌 오직 stealth2에만 해당하는 인스턴스 변수입니다. 그래서 stealth1.cloaking으로 접근할 때와 달리 stealth2.cloaking으로 접근해 값을 비교하는 데 아무런 문제가 없습니다.
표 9-1 두 객체의 인스턴스 변수 비교
stealth1의 인스턴스 변수 |
stealth2의 인스턴스 변수 |
name |
name |
hp |
hp |
damage |
damage |
- |
cloaking |