python
[python] 상속
bbiyak2da
2025. 5. 28. 11:29
상속
Python의 상속(inheritance)은 기존 클래스(부모 클래스)의 기능을 그대로 물려받아 새로운 클래스를 만드는 것
🧬 쉽게 말하면?
상속은 붕어빵 틀을 물려받아 새 붕어빵 틀을 만드는 것이에요.
기본 붕어빵 틀(부모 클래스)에 기능을 추가하거나 바꾸는(확장, 수정) 거죠!
🔹 왜 상속을 사용할까?
- 기존 클래스를 재사용하고
- 공통 기능은 그대로, 다른 기능은 따로 추가하고 싶을 때
🔸 기본 예제
# 부모 클래스
class Animal:
def sound(self):
print("동물이 소리를 냅니다.")
# 자식 클래스 (Animal을 상속받음)
class Dog(Animal):
def bark(self):
print("멍멍!")
dog = Dog()
dog.sound() # 부모 클래스 메서드 사용 가능
dog.bark() # 자식 클래스 메서드
동물이 소리를 냅니다.
멍멍!
🔸 상속의 구조
class 자식클래스(부모클래스):
# 추가하거나 바꾸고 싶은 내용 정의
🔸 메서드 오버라이딩 (기능 바꾸기)
class Animal:
def sound(self):
print("???") # 기본 동물 소리
class Cat(Animal):
def sound(self): # 부모의 sound()를 덮어쓰기
print("야옹~")
cat = Cat()
cat.sound() # 출력: 야옹~
🔸 super() 사용하기 (부모 메서드 호출)
class Animal:
def sound(self):
print("기본 동물 소리")
class Bird(Animal):
def sound(self):
super().sound() # 부모 클래스의 sound()도 호출
print("짹짹!")
bird = Bird()
bird.sound()
기본 동물 소리
짹짹!
✅ 요약
상속 | 기존 클래스의 속성과 메서드를 물려받음 |
부모 클래스 | 상속을 제공하는 클래스 |
자식 클래스 | 상속을 받는 클래스 |
오버라이딩 | 부모의 기능을 자식이 바꾸는 것 |
super() | 부모 클래스의 기능을 호출할 때 사용 |
실습
# 일반 유닛
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)
self.damage = damage
def attack(self, location):
print("{0} : {1} 방향으로 적군을 공격합니다. [공격력 {2}]"\
.format(self.name, location, self.damage))
def damaged(self, damage):
print("{0} : {1} 데미지를 입었습니다.".format(self.name, damage))
self.hp -= damage
print("{0} : 현재 체력은 {1} 입니다.".format(self.name, self.hp))
if self.hp <= 0:
print("{0} : 파괴되었습니다.")
firebat1 = AttackUnit("파이어뱃", 50, 16)
firebat1.attack("5시")
# 공격 2번 받는다고 가정
firebat1.damaged(25)
firebat1.damaged(25)
파이어뱃 : 5시 방향으로 적군을 공격합니다. [공격력 16]
파이어뱃 : 25 데미지를 입었습니다.
파이어뱃 : 현재 체력은 25 입니다.
파이어뱃 : 25 데미지를 입었습니다.
파이어뱃 : 현재 체력은 0 입니다.
{0} : 파괴되었습니다.