728x90
반응형
# 함수를 사용하지 않은경우
메이플스토리로 예시를 들어보자면
D_name = "듀얼블레이드"
D_HP = 1000
D_MP = 200
print("{0} 캐릭터가 생성되었습니다.".format(D_name))
print("체력 {0}, 공격력 {1}".format(D_HP,D_MP))
듀얼블레이드 캐릭터가 생성되었습니다.
체력 1000, 공격력 200
A_name = "아델"
A_HP = 900
A_MP = 150
print("{0} 캐릭터가 생성되었습니다.".format(A_name))
print("체력 {0}, 공격력 {1}".format(A_HP,A_MP))
아델 캐릭터가 생성되었습니다.
체력 900, 공격력 150
# 함수를 사용한 경우
위와 같은 코드를 함수를 이용해서 간략하게 작성을 해보면
def attack(name, location, damage):
print("{0} : {1} 지역에서 사냥을 합니다. [MP {2}]".format(name,location,damage))
attack(D_name,"엘나스",D_MP)
attack(A_name,"커닝시티",A_MP)
듀얼블레이드 : 엘나스 지역에서 사냥을 합니다. [MP 200]
아델 : 커닝시티 지역에서 사냥을 합니다. [MP 150]
그런데 만약 캐릭터가 하나가 아닌 수백개라면?
캐릭터의 name, HP, MP 를 계속해서 추가해줘야 한다.
이러한 불편함을 막기 위해 클래스 라는 것을 사용한다.
# 클래스
class maple:
def __init__(self, name, HP, MP):
self.name = name
self.HP = hp
self.MP = damage
print("{} 캐릭터가 생성 되었습니다.".format(name))
print("HP {}, MP {}".format(HP, MP))
D = maple('듀열블레이드', 1000, 200)
A = maple('아델', 900, 150)
AA = maple('아델',800,130)
듀열블레이드 캐릭터가 생성 되었습니다. HP 1000, MP 200
아델 캐릭터가 생성 되었습니다. HP 900, MP 150
아델 캐릭터가 생성 되었습니다. HP 800, MP 130
# __init__ (생성자)
객체(D, A, AA)가 만들어질 때 자동으로 호출됨
class maple:
def __init__(self, name, HP, MP):
self.name = name
self.HP = HP
self.MP = MP
A = maple('듀얼블레이드',1000,200)
print(A.name, A.HP)
듀얼블레이드 1000
# 메소드
class mapleAttack:
def __init__(self, name, HP, MP):
self.name = name
self.HP = HP
self.MP = MP
def attack(self, location):
print("{0} : {1} 지역에서 사냥을 합니다. [MP {2}]".format(self.name,location, self.MP))
def damaged(self, damaged):
print("{0} : {1} 데미지를 입었습니다.".format(self.name,100))
self.HP -= damaged
print("{0} : 현재 HP는 {1} 입니다.".format(self.name, self.HP))
if self.HP <= 0 :
print("{0} : 파괴되었습니다.".format(self.name))
D = mapleAttack('듀열블레이드', 1000, 200)
D.attack("커닝시티")
D.damaged(25)
D.damaged(25)
듀열블레이드 : 커닝시티 지역에서 사냥을 합니다. [MP 200]
듀열블레이드 : 100 데미지를 입었습니다.
듀열블레이드 : 현재 HP는 975 입니다.
듀열블레이드 : 100 데미지를 입었습니다.
듀열블레이드 : 현재 HP는 950 입니다.
# 상속
# 일반 유닛
class Unit:
def __init__(self, name, hp,damage):
self.name = name
self.hp = hp
# 공격 유닛
class AttackUnit:
def __init__(self, name, hp, damage):
self.name = name
self.hp = hp
self.damage = damage
def attack(self, location):
print("{0} : {1} 방향으로 적군을 공격. [공격력 {2}]".format(self.name,location, self.damage))
def damaged(self, damaged):
print("{0} : {1} 데미지를 입었습니다.".format(self.name,damaged))
self.hp -= damaged
print("{0} : 현재 체력은 {1} 입니다.".format(self.name, self.hp))
if self.hp <= 0 :
print("{0} : 파괴되었습니다.".format(self.name))
firebat1 = AttackUnit("파이어뱃",50,16)
firebat1.attack("5시")
firebat1.damaged(25)
firebat1.damaged(25)
위 코드에서
- self.name = name
- self.hp = hp
이 두가지가 일반 유닛과 공격 유닛에 중복되는 코드임
-> Unit 이라는 클래스를 상속받아서 AttackUnit을 만들어보자!
# 일반 유닛
class Unit:
def __init__(self, name, hp):
self.name = name
self.hp = hp
# 공격 유닛
class AttackUnit(Unit):
def __init__(self, name, hp, damage):
Unit.__init__(self, name, hp) # 일반 유닛으로 부터 name, hp 를 전달받음
self.damage = damage
def attack(self, location):
print("{0} : {1} 방향으로 적군을 공격. [공격력 {2}]".format(self.name,location, self.damage))
def damaged(self, damaged):
print("{0} : {1} 데미지를 입었습니다.".format(self.name,damaged))
self.hp -= damaged
print("{0} : 현재 체력은 {1} 입니다.".format(self.name, self.hp))
if self.hp <= 0 :
print("{0} : 파괴되었습니다.".format(self.name))
firebat1 = AttackUnit("파이어뱃",50,16)
firebat1.attack("5시")
firebat1.damaged(25)
firebat1.damaged(25)
# 상속 쉬운 예시
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def get_name(self):
print(f'제 이름은 {self.name}입니다.')
def get_age(self):
print(f'제 나이는 {self.age}세 입니다.')
class Student(Person):
def __init__(self, name, age, GPA):
super().__init__(name, age)
self.GPA = GPA
def get_GPA(self):
print(f'제 학점은 {self.GPA}입니다.')
student_a = Student('김OO', 27, 3.4)
student_a.get_name() # 제 이름은 김OO입니다.
student_a.get_age() # 제 나이는 27세 입니다.
student_a.get_GPA() # 제 학점은 3.4입니다.
728x90
반응형
'python' 카테고리의 다른 글
[python] matplotlib - plt.bar (xlabel / ylabel / xticks / yticks / legend) (0) | 2023.03.24 |
---|---|
[python] 결측값(null/nan) 개수/ 존재 구하는 방법 (0) | 2023.03.18 |
[python] apply lambda (0) | 2022.05.30 |
[python] reset_index( ) (0) | 2022.05.30 |
[python] stack & unstack (0) | 2022.05.19 |