클래스들의 공통된 속성과 메서드를 뽑아내서 부모 클래스를 만든다.
이를 자식 클래스에서 상속받아서 사용한다.
코드의 중복을 제거할 수 있다.
유지보수가 편리해진다.

실습


class Item:
"""
속성: 이름
메서드 : 줍기 , 버리기
"""
def __init__(self,name):
self.name = name
def pick(self):
print(f"[{self.name}]을(를) 주웠습니다.")
def discard(self):
print(f"[{self.name}]을(를) 버렸습니다.")
class Weapon(Item):
"""
속성: 공격력
메서드 :공격하기
"""
def __init__(self, name, demage):
super().__init__(name)
self.demage = demage
def attack(self):
print(f"[{self.name}]을(를) 이용해 {self.demage}로 공격합니다.")
class HealingItem(Item):
"""
속성 :회복량
메서드 : 사용하기
"""
def __init__(self, name, recovery_amount):
super().__init__(name)
self.recovery_amount = recovery_amount
def use(self):
print(f"[{self.name}]을(를) 사용합니다. {self.recovery_amount} 회복")
m16 = Weapon("m16" , 110)
bandage = HealingItem("붕대", 20)
m16.attack()
bandage.use()

from abc import *
class Item(metaclass=ABCMeta):
"""
속성: 이름
메서드 : 줍기 , 버리기
"""
def __init__(self,name):
self.name = name
def pick(self):
print(f"[{self.name}]을(를) 주웠습니다.")
def discard(self):
print(f"[{self.name}]을(를) 버렸습니다.")
@abstractmethod
def use(self):
pass
class Weapon(Item):
"""
속성: 공격력
메서드 :공격하기
"""
def __init__(self, name, demage):
super().__init__(name)
self.demage = demage
def use(self):
print(f"[{self.name}]을(를) 이용해 {self.demage}로 공격합니다.")
class HealingItem(Item):
"""
속성 :회복량
메서드 : 사용하기
"""
def __init__(self, name, recovery_amount):
super().__init__(name)
self.recovery_amount = recovery_amount
def use(self):
print(f"[{self.name}]을(를) 사용합니다. {self.recovery_amount} 회복")
m16 = Weapon("m16" , 110)
bandage = HealingItem("붕대", 20)
m16.use()
bandage.use()
만약 자식 클래스가 추상메서드를 가진 추상클래스를 상속받는다면, 자식클래스 내부에 반드시 추상메서드를 사용해야한다.
ex) 만약 weapon 클래스에서 use 대신 attack 이라는 메서드로 이름을 바꿔서 실행을하면
def attack(self):
print(f"[{self.name}]을(를) 이용해 {self.demage}로 공격합니다.")
아래와 같은 오류가 뜬다
