본문 바로가기
programming/Python

파이썬 상속 오버라이딩 사용 python inheritance overriding

by 개코 - 개발과 코딩 2021. 11. 13.

파이썬은 상속을 통해 부모클래스의 기능을 확장하여 사용할 수 있다. 상속을 받은 자식클래스는 부모클래스를 재정의할 수 있는데 이것을 오버라이딩이라고 한다. 오버라이딩을 하며 자식클래스는 부모클래스의 변수와 메서드를 그대로 받아들여 하나의 독립된 객체로 사용할 수 있다.

파이썬 상속 오버라이딩 사용
python inheritance overriding

파이썬에서 자식클래스와 부모클래스를 굳이 나누는 이유가 있다.

부모클래스를 먼저 만들어 사용하다가 어떠한 시점에 기능을 확장하고 싶을 때 자식클래스를 만들어 사용할 수 있다.

클래스 기능의 확장과 활용범위를 높이는 것의 목적이 크다.

파이썬 개발을 할 때 어떤 업무의 공통된 부분이 있다면 부모클래스로 만들고, 자식클래스로 상속하여 업무의 상세한 기능확장이 가능하다.

파이썬 생성자 init 오버라이딩

자식클래스가 부모클래스를 상속받았다면 생성자를 통해 클래스 변수에 값을 설정할 필요가 있다.

부모클래스를 상속받았고 부모클래스의 변수와 메서드를 사용하기 위해 상속받은 부모클래스 또한 init() 메서드로 초기화를 할 필요가 있다.

이것을 오버라이딩이라고 한다.

오버라이딩은 상속받은 자식클래스에서 메서드를 재정의하는 것을 말한다.

간단한 코드를 살펴보자.

class pythonParentClass : #-{

    def __init__(this, property) : #-{
        this.PROPERTY = property
    #-}

#-}

class pythonChildClass(pythonParentClass) : #-{

    def __init__(this, property) : #-{
    	pythonParentClass.__init(this.property)
    #-}

#-}

샘플코드

파이썬에서 자식클래스는 부모클래스를 상속받는다.

상속받은 자식클래스를 오버라이딩을 통해 부모클래스를 재정의한다.

오버라이딩을 사용하여 부모클래스를 상속받아 자식클래스를 만들어 본다.

이전에 사용한 코드를 계속 사용할 것이다.

print('----------')

#- 클래스부분
class ParentClass : #-{

    def __init__(this, soldier, hp, weapon, fire) : #-{
        this.SOLDIER = soldier
        this.HP = hp
        this.WEAPON = weapon
        this.FIRE = fire
    #-}

#-}

class ChildClass(ParentClass) : #-{

    def __init__(this, soldier, hp, weapon, fire) : #-{
        
        ParentClass.__init__(this, soldier, hp, weapon, fire)
        
    #-}
    
    def DisplayInfo(this) :  #-{
        
        vValue = this.SOLDIER
        print("군인", type(vValue), vValue);
       
        vValue = this.HP
        print("체력", type(vValue), vValue);

        vValue = this.WEAPON
        print("무기", type(vValue), vValue);

        vValue = this.FIRE
        print("공격력", type(vValue), vValue);
 
    #-}
         

#-}

print('----------')

vCls1 = ChildClass("소총수", 100, "GUN", "10")
vCls1.DisplayInfo();

print('----------')

vCls2 = ChildClass("저격수", 50, "SNIPER", "50")
vCls2.DisplayInfo();

print('----------')

vCls3 = ChildClass("포격수", 10, "BOMBER", "100")
vCls3.DisplayInfo();

print('----------')

자식클래스는 부모클래스를 상속받고 있는 것을 볼 수 있다.

상속을 받고 자식클래스는 부모클래스를 오버라이딩하여 재정의하고 있다.

이로써 자식클래스는 부모클래스의 기능을 확장하여 독립적인 객체로 사용할 수 있다.

결과 화면을 보자.

사람마다 다르겠지만 부모클래스를 하나의 템플릿으로 이해하는 분들도 있다.

느낌적으로는 틀린 것은 아니다.

결과화면을 보면 왜 그런지 알 수 있다.

군인, 체력, 무기, 공격력은 부모클래스로써 하나의 템플릿화가 되었다.

소총수, 체력값, 무기타입, 공격력값은 상세한 데이터가 들어갔기 떄문에 자식클래스로써 활용되고 있기도 하다.

반응형

댓글