패스트캠퍼스 한 번에 끝내는 파이썬 웹 개발 초격차 패키지 pt2 상속

정영찬·2022년 2월 2일
0

상속?

  • 클래스들의 공통된 속성과 메서드를 뽑아내서 부모 클래스를 만든다.

  • 이를 자식 클래스에서 상속받아서 사용한다.

  • 코드의 중복을 제거할 수 있다.

  • 유지보수가 편리해진다.

실습

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}로 공격합니다.")

아래와 같은 오류가 뜬다

profile
개발자 꿈나무

0개의 댓글