- 스타크래프트 게임을 예시로 들겠다.
# 마린 : 공격 유닛, 군인, 총을 사용 name = "마린" # 유닛의 이름 hp = 40 # 유닛의 체력 damage = 5 # 유닛의 공격력 print("{0} 유닛이 생성되었습니다.".format(name)) print("체력 {0}, 공격력 {1}\n".format(hp, damage)) # 출력값 : # 마린 유닛이 생성되었습니다. # 체력 40, 공격력 5 # 탱크 : 공격 유닛, 탱크. 포를 쏠 수 있다. 일반 모드 / 시즈 모드 tank_name = "탱크" tank_hp = 150 tank_damage = 35 print("{0} 유닛이 생성되었습니다.".format(tank_name)) print("체력 {0}, 공격력 {1}\n".format(tank_hp, tank_damage)) # 출력값 : # 탱크 유닛이 생성되었습니다. # 체력 150, 공격력 35
def attack(name, location, damage): # name : 어느 유닛이 # location : 어느 위치로 # damage : 얼마만큼의 피해를 줄지 print("{0} : {1} 방향으로 적군을 공격합니다. [공격력 {2}]"\ .format(name, location, damage)) attack(name, "1시", damage) attack(tank_name, "1시", tank_damage) # 출력값 : # 마린 : 1시 방향으로 적군을 공격합니다. [공격력 5] # 탱크 : 1시 방향으로 적군을 공격합니다. [공격력 35]
# 마린 name = "마린" hp = 40 damage = 5 print("{0} 유닛이 생성되었습니다.".format(name)) print("체력 {0}, 공격력 {1}\n".format(hp, damage)) # 탱크 1 tank_name = "탱크" tank_hp = 150 tank_damage = 35 print("{0} 유닛이 생성되었습니다.".format(tank_name)) print("체력 {0}, 공격력 {1}\n".format(tank_hp, tank_damage)) # 탱크 2 tank2_name = "탱크" tank2_hp = 150 tank2_damage = 35 print("{0} 유닛이 생성되었습니다.".format(tank2_name)) print("체력 {0}, 공격력 {1}\n".format(tank2_hp, tank2_damage)) attack(name, "1시", damage) attack(tank_name, "1시", tank_damage) attack(tank2_name, "1시", tank2_damage)
문제점 : 실제 게임에서는 탱크가 수십 개인데 매번 만들어주는 것은 무리이다.
해결책 : 'class'의 사용
# class의 사용 class Unit: def __init__(self, name, hp, damage): self.name = name self.hp = hp self.damage = damage print("{0} 유닛이 생성되었습니다.".format(self.name)) print("체력 {0}, 공격력 {1}".format(self.hp, self.damage)) # __init__(self, name, hp, damage)에서 self를 제외한 나머지를 적는다. # Unit(name, hp, damage) marine1 = Unit("마린", 40, 5) marine2 = Unit("마린", 40, 5) tank1 = Unit("탱크", 150, 35) # 출력값 : # 마린 유닛이 생성되었습니다. # 체력 40, 공격력 5 # 마린 유닛이 생성되었습니다. # 체력 40, 공격력 5 # 탱크 유닛이 생성되었습니다. # 체력 150, 공격력 35
- python에서 쓰이는 생성자
- class로부터 만들어지는 '객체'들이 만들어질 때 자동으로 호출
- marine과 tank는 Unit class의 'instance' 라고 표현
- instance가 생성될 때에는 init 함수의 정의된 개수와 동일하게 정의되어야 한다(self 제외)
ex)
marine3 = Unit("마린") marine3 = Unit("마린", 40) 사용 불가능!
