1) 클래스와 객체의 개념
2) 클래스 사용하기
goblin = Monster() #인스턴스 = 클래스이름()
goblin.say() #인스턴스.메서드()
👉 인스턴스는 클래스와 연관지어 말할때, 객체는 그 자체만 말할때 사용한다.
3) 파이썬에서는 자료형도 클래스이다.
👉 자료형의 함수를 알기 위해서는 변수.dir() 을 해준다.
1) 속성
class Monster:
def __init_(self, health, attack, speed): # 인스턴스를 만들때 반드시 호출되는 메서드
self.health = health # goblin.health = 800
self.attack = attack # goblin.attack = 120
self.speed = speed # goblin.attack = 300
goblin = Monster(800,120,300) #init의 매개변수로 들어간다.
--> init 메서드는 인스턴스를 만들때 반드시 호출되는 함수이고, Monster(800,120,300)를 작성할 때 인스턴스가 만들어진다.
--> self : 인스턴스 자기 자신을 의미한다.
--> goblin = Monster(800,120,300)를 작성할 때, init 메서드의 self는 goblin 자기 자신을 뜻한다.
2) 메서드 추가하기
class Monster:
def __init_(self, health, attack, speed): # 인스턴스를 만들때 반드시 호출되는 메서드
self.health = health # goblin.health = 800
self.attack = attack # goblin.attack = 120
self.speed = speed # goblin.attack = 300
def decrease_health(self, num):
self.health -= num
def get_health(self):
return self.health
goblin = Monster(800,120,300)
goblin.decrease_health(100)
print(goblin.get_health())
1) 상속의 개념
: 자식클래스가 부모클래스의 속성과 메서드를 그대로 가지고 오는 것.
2) 상속 사용방법
class Monster:
def __init__(self, name, health, attack):
self.name = name
self.health = health
self.attack = attack
def move(self):
print("지상에서 이동하기")
class Wolf(Monster): # Monster를 상속받기 때문에 Monster의 속성을 자동으로 쓰게 됨.
pass
class Shark(Monster):
def move(self): # 메서드 오버라이딩
print('헤엄치기')
class Dragon(Monster):
def move(self): # 메서드 오버라이딩
print('날기')
1) 메서드 오버라이딩 : 부모 클래스에 있던 메서드를 재정의
import random
# 상속 : 클래스들에 중복된 코드를 제거하고 유지보수를 편하게 하기 위해서 사용
# 클래스 변수 : 인스턴스들이 모두 공유하는 변수
# 부모 클래스
class Monster:
max_num = 1000 # 클래스 변수
def __init__(self, name, health, attack):
self.name = name
self.health = health
self.attack = attack
Monster.max_num -= 1 # 클래스 변수
def move(self):
print(f"[{self.name}] 지상에서 이동하기")
# 자식 클래스
class Wolf(Monster):
pass
class Shark(Monster):
def move(self): # 메서드 오버라이딩
print(f"[{self.name}] 헤엄치기")
class Dragon(Monster):
# 생성자 오버라이딩
def __init__(self, name, health, attack):
super().__init__(name, health, attack) # 부모 클래스의 init을 불러올 수 있음.
self.skills = ("불뿜기","꼬리치기", "날개치기")
def move(self) : # 메서드 오버라이딩
print(f"[{self.name}] 날기")
def skill(self):
print(f"[{self.name}] 스킬 사용 {self.skills[random.randint(0,2)]}")
wolf = Wolf("울프", 1500, 200)
wolf.move()
print(wolf.max_num)
shark = Shark("샤크", 3000, 400)
shark.move()
print(shark.max_num)
dragon = Dragon("드래곤", 8000, 800)
dragon.move()
dragon.skill()
print(dragon.max_num)
출력결과
1) is_a : 서로 상속을 할 때 가지는 관계
Dragon is a Monster
2) has_a : 상속이 아닌 속한 관계
Player has a Unit
출처 : 패스트캠퍼스 Python & Django로 시작하는 웹 프로그래밍