IT/프로그래밍

[파이썬] 파이썬 클래스 상속 [패스트 캠퍼스 챌린지 35일]

뜻밖의 행복 2022. 2. 27. 15:10
반응형

안녕하세요? 뜻밖의 행운입니다.

패스트 캠퍼스 도전 35일차

글을 쓰는 시점은 22년 2월도 끝나가는 시점입니다.

50일차면 끝인데 이제 보름 정도 남았네요

 

과거에 한번 배웠던 내용인데

클래스 상속을 사용하는 이유는?

네 반복을 싫어하는 개발자를 위해서 

반복을 줄이기 위해 그러면서 코드의 간결함을 추구하기 만들어진 

기능이라고 했습니다.

 

아래는 오늘 배운 내용을 정리한것 입니다.

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)
bungdae = HealingItem("붕대", 20)

m16.attack()
bungdae.use()

실행시키면 위 처럼 잘 동작하는 것이 보입니다.

그러면 하나씩 다시 살펴보면

 

class Item:
    """
    속성 : 이름
    메서드 : 줍기, 버리기
    """
    def __init__(self, name):
        self.name = name
    
    def pick(self):
        print(f"[{self.name}]을(를) 주웠습니다.")

    def discard(self):
        print(f"[{self.name}]을(를) 버렸습니다.")

 

우선은 Item 클래스를 정의 하는 모습입니다.

처음에는 name 속성만 있는 것이 보입니다.

그리고 매서드에는 

pick, discard가 있는데 각각 아이템 줍기와 버리기가 있네요 

호출하면 아이템 이름명과 함꼐 주웠습니다. 와 버렸습니다. 를 출력하는게 보이네요

 

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} 회복")

자 이제 어떻게 상속이 되는지 볼까요?

상속은 과거에 봤듯이 클래스명 하고 () 안에 부모 클래스 이름을 적어주면 됩니다.

그리고 같은 내용은 그냥 super로 받아서 넘기구요 

추가할 내용이나 변경사항만 샤샤샤삭 추가하면 됩니다.

위에 weapon은 무기니까 공격 매서드를 추가하고 

HealingItem은 이름값 하게 딱 회복 매서드를 추가해서 

만들어 줍니다. 

 

이렇게 상속을 받아서 사용하니 굳이 name 을 지정할 필요 없고

공통된 부분이니까 item 클래스에서 한번만 작성하면 되니

매우 편하죠?

 

인스턴스로 할당하고 

잘 동작하는 것을 보니 아주 마음이 편하네요!

 

 

 

반응형