이와 같이 클래스로부터 객체를 만든 다음, 객체만을 위한 인스턴스 변수가 필요한 경우에는 클래스 외부에서 별도로 정의할 수 있습니다. 이때 해당 객체를 제외한 다른 객체들은 새로 정의한 인스턴스 변수를 알지 못하며 사용할 수도 없습니다. 오직 한 객체만을 위한 인스턴스 변수가 됩니다.
정리하면 인스턴스 변수는 클래스의 메서드에서 정의하거나 객체를 통해 직접 정의할 수 있습니다.
지금까지 작성한 코드는 다음과 같습니다.
class Unit:
def __init__(self, name, hp, damage): # 생성자, self 외 전달값 3개
self.name = name # 인스턴스 변수 name
self.hp = hp # 인스턴스 변수 hp
self.damage = damage # 인스턴스 변수 damage
print("{0} 유닛을 생성했습니다.".format(self.name))
print("체력 {0}, 공격력 {1}".format(self.hp, self.damage))
# 전투기: 공중 유닛, 은폐 불가
stealth1 = Unit("전투기", 80, 5) # 체력 80, 공격력 5
# 인스턴스 변수 접근
print("유닛 이름 : {0}, 공격력 : {1}".format(stealth1.name, stealth1.damage))
# 은폐 가능
stealth2 = Unit("업그레이드한 전투기", 80, 5)
# 업그레이드한 전투기만을 위한 특별한 인스턴스 변수 정의, 은폐 상태
stealth2.cloaking = True
if stealth2.cloaking == True: # 은폐 상태라면
print("{0}는 현재 은폐 상태입니다.".format(stealth2.name))
# 오류 발생
# if stealth1.cloaking == True: # 다른 전투기의 은폐 여부
# print("{0}는 현재 은폐 상태입니다.".format(stealth1.name))