[Python Basic] 09. 클래스, Initialize(생성자), 멤버 변수, 메소드
Rylah
2022. 1. 19. 16:10
# 1. 클래스
# 마린 : 공격 유닛 , 군인, 총을 쏠 수 있음
name = "마린" # 유닛의 이름
hp = 40 # 유닛의 체력
damage = 5 # 유닛의 공격력
print(f"{name} 유닛이 생성되었습니다.")
print(f"체력 {hp}, 공격력 {damage}\n")
# 탱크 : 공격 유닛, 탱크, 포를 쏠 수 있는데, 일반 모드 / 시즈 모드
tank_name = "탱크"
tank_hp = 150
tank_damage = 35
print(f"{tank_name} 유닛이 생성되었습니다.")
print(f"체력 {tank_hp}, 공격력 {tank_damage}\n")
tank2_name = "탱크"
tank2_hp = 150
tank2_damage = 35
print(f"{tank2_name} 유닛이 생성되었습니다.")
print(f"체력 {tank2_hp}, 공격력 {tank2_damage}\n")
def attack(name, location, damage):
print(f"{name} : {location} 방향으로 적군을 공격합니다. [공격력 : {damage}]")
attack(name,"1시",damage)
attack(tank_name,"1시",tank_damage)
attack(tank2_name,"1시",tank2_damage)
# 하지만 이런 방법은 매우 비효율적이다.
print()
print()
# 클래스는 하나의 틀이다. 변수와 함수들의 집합이라고 생각해도 된다.
class Unit:
def __init__(self, name, hp, damage): # 클래스 생성자
self.name = name
self.hp = hp
self.damage = damage
print(f"{self.name} 유닛이 생성되었습니다.")
print(f"체력 {self.hp}, 공격력 {self.damage}")
marine1 = Unit("마린", 40, 5)
marine2 = Unit("마린", 40, 5)
tank = Unit("탱크", 150, 35)
# 2. __init__
class Unit:
def __init__(self, name, hp, damage): # 클래스 생성자
self.name = name
self.hp = hp
self.damage = damage
print(f"{self.name} 유닛이 생성되었습니다.")
print(f"체력 {self.hp}, 공격력 {self.damage}")
# 클래스로 만들어지는 것 : 객체
# 마린, 탱크 = 인스턴스
marine1 = Unit("마린", 40, 5)
marine2 = Unit("마린", 40, 5)
tank = Unit("탱크", 150, 35)
#marine3 = Unit("마린") # 오류
#marine3 = Unit("마린", 40) #오류
# 3. 멤버 변수
# 클래스 내에 정의 된 변수들을 통침함
class Unit:
def __init__(self, name, hp, damage): # 클래스 생성자
self.name = name
self.hp = hp
self.damage = damage
print(f"{self.name} 유닛이 생성되었습니다.")
print(f"체력 {self.hp}, 공격력 {self.damage}")
# 레이스 : 공중 유닛, 비행기. 클로킹(상대방에게 보이지 않음)
wraith1 = Unit("레이스", 80, 5)
print("유닛 이름은 {0}, 공격력 : {1}".format(wraith1.name, wraith1.damage))
# 마인드 컨트롤 : 상대방 유닛을 내 것으로 만드는 것 (빼앗음)
wraith2 = Unit("빼앗은 레이스", 80, 5)
wraith2.clocking = True
# 파이썬에서는 객체에 외부에서 변수를 추가로 할당해서 사용할 수 있다.
# 하지만 각 객체마다 따로 있을 수 있는 거라 연결된 클래스에서 만들어진 다른 객체에서 사용할 수는 없다.
if wraith2.clocking == True:
print(f"{wraith2.name}는 현재 클로킹 상태입니다.")
# 4. 메소드
class Unit:
def __init__(self, name, hp, damage): # 클래스 생성자
self.name = name
self.hp = hp
self.damage = damage
print(f"{self.name} 유닛이 생성되었습니다.")
print(f"체력 {self.hp}, 공격력 {self.damage}")
class AttackUnit:
def __init__(self, name, hp, damage):
self.name = name
self.hp = hp
self.damage = damage
def attack(self, location):
print(f"{self.name} : {location} 방향으로 적군을 공격합니다. [공격력 : {self.damage}]")
def damaged(self, damage):
print(f"{self.name} : {damage} 데미지를 입었습니다.")
self.hp -= damage
print(f"{self.name} : 현재 체력은 {self.hp} 입니다.")
if self.hp <= 0:
print(f"{self.name} : 파괴되었습니다.")
# 파이어뱃 : 공격 유닛, 화염 방사기
firebat1 = AttackUnit("파이어뱃", 50, 16)
firebat1.attack("5시")
# 공격을 두번 받는다고 가정
firebat1.damaged(25)
firebat1.damaged(25)