[Python] 클래스(Class)
작성:    
업데이트:
카테고리: Python Youtube
클래스(Class)
- 스타크래프트 게임을 예시로 들겠다.
상황 1. 마린 1개, 탱크 1개
# 마린 : 공격 유닛, 군인, 총을 사용
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
상황 2. 공격
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]
상황 3. 마린 1개, 탱크 2개
# 마린
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’의 사용
상황 4. n개의 유닛에 대응하기
# 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
__init 함수
- python에서 쓰이는 생성자
- class로부터 만들어지는 ‘객체’들이 만들어질 때 자동으로 호출
- marine과 tank는 Unit class의 ‘instance’ 라고 표현
- instance가 생성될 때에는 init 함수의 정의된 개수와 동일하게 정의되어야 한다(self 제외)
ex)
marine3 = Unit("마린")
marine3 = Unit("마린", 40)
사용 불가능!
댓글남기기