728x90


상속

Class 자식 클래스(부모 클래스):


* 부모 클래스가 갖는 모든 메소드가 자식 클래스에도 담긴다.
* 한 번에 둘 이상의 클래스를 상속받는 것도 가능하나 일반적으로는 둘 이상의 클래스를 상속하지 않는다.
* 부모 클래스가 갖는 메소드와 동일한 이름의 메소드를 자식 클래스가 정의하는 것을 '메소드 오버로딩' 이라고 한다. 
메소드 오버로딩을 하면, 자식 클래스에서 정의된 메소드로 부모 클래스의 메소드가 가려진다.(지워진 상태가 아님)
* 메소드 오버로딩 후 자식 클래스의 메소드가 아닌 부모 클래스의 메소드를 호출하고 싶다면 'super().부모클래스의 메소드명' 으로 호출
* 자식 클래스에서 부모 클래스의__init__ 메소드를 호출해 객체 생성 시 객체 내에서 필요로 하는 모든 변수를 초기화해줘야한다.

 

class GameCharactor:  # 게임 속 모든 캐릭터들의 기본 속성
    def __init__(self, hp, mp):
        self.hp = hp
        self.mp = mp

    def hitted(self, damage):  # 피격당하면 hp 감소
        self.hp -= damage

    def skill(self, use_mp):  # 스킬 사용하면 mp감소
        self.mp -= use_mp

    def show_status(self):
        print("hp : %f , mp : %f" % (self.hp, self.mp))


class Demon(GameCharactor):  # 직업 중에 데몬이라는 직업이 있다고 가정
    def __init__(self, hp, mp, dp):  
        super().__init__(hp, mp)
        self.dp = dp    # 캐릭터의 기본 특성에 데몬만이 갖고 있는 dp를 초기화 시켜줌

    def special_skill(self):  # 특수 스킬을 쓰면 횟수가 하나씩 감소
        self.dp -= 1

    def show_status(self):
        super().show_status()
        print("남은 궁극기 횟수 : %d" % self.dp)


my_demon = Demon(100, 100, 10)
my_demon.hitted(10)
my_demon.skill(12)
my_demon.special_skill()  #hp : 90.000000 , mp : 88.000000
my_demon.show_status()  #남은 궁극기 횟수 : 9

 

728x90

+ Recent posts