본문 바로가기
programming/Python

파이썬 클래스 상속 변수 생성 adding python class inheritance property

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

파이썬은 클래스를 상속받았다고 해도 프로퍼티를 중간에 추가할 수 있다. 생성자에서 추가된 클래스 변수인 프로퍼티를 추가하면 데이터 관리가 용이하다. 어차피 부모클래스를 상속받은 자식클래스는 하나의 독립된 객체로써 사용이 가능한 것이기에 프로퍼티를 추가해도 자식클래스의 특성으로 생성된다.

파이썬 클래스 상속 변수 생성
adding python class inheritance property

파이썬으로 클래스를 상속받아 자식클래스에서 기능을 확장할 수 있지만 추가적으로 클래스 변수인 프로퍼티를 추가할 필요가 있다.

프로퍼티를 추가하기 위해선 클래스 생성자에 프로퍼티를 작성해주고 값을 넣어주면 그만이다.

파이썬은 데이터에 관대한 측면도 있다.

클래스가 이미 생성되었다고 해도 중간에 프로퍼티를 추가할 수도 있지만 개발중일 때만 사용하거나 특별한 경우가 아니라면 사용할 클래스 변수는 미리 정의해서 사용하는 것이 좋다.

중간중간 프로퍼티들이 증가해도 나중에 유지보수가 힘들어 진다.

클래스 변수 프로퍼티 추가

파이썬에서 클래스 변수인 프로퍼티를 추가하려면 클래스 생성자에서 프로퍼티를 지정해 주면 된다.

프로퍼티를 지정하고 초기값을 넣어주면 그만이다.

super 함수를 사용하여 상속받는 후에 프로퍼티를 추가해도 된다.

어차피 파이썬은 상속을 받은 이후 하나의 독립된 개체로 합쳐버리기 때문이다.

super 함수 밑에 프로퍼티가 추가된 것에 주목하자.

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

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

#-}

class ChildClass(ParentClass) : #-{

    def __init__(this, property, hp, weapon, fire, range) : #-{
        
        #- ParentClass.__init__(this, property)
        super().__init__(property)
        this.ADD_PROPERTY = property
        
    #-}

샘플코드

기존의 코드를 이용하여 위의 것처럼 상속을 받고 프로퍼티를 만들어 본다.

super 함수를 사용하여 부모클래스를 상속받아도 상관없다.

어차피 하나의 객체로 기능이 합쳐지기 떄문이다.

super 함수 밑에 RANGE 프로퍼티를 추가한 것에 주목하자.

사거리를 의미하는 RANGE 프로퍼티를 추가하여 병사마다 사격거리를 표현했다.

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, range) : #-{
        
        #- ParentClass.__init__(this, soldier, hp, weapon, fire)
        super().__init__(soldier, hp, weapon, fire)
        this.RANGE = range
        
    #-}
    
    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);

        vValue = this.RANGE
        print("사거리", type(vValue), vValue);
 
    #-}
         

#-}

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

vCls1 = ChildClass("소총수", 100, "GUN", "10", 10)
vCls1.info = "소총수 기본병사"
print(type(vCls1.info), vCls1.info);
vCls1.DisplayInfo();

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

vCls2 = ChildClass("저격수", 50, "SNIPER", "50", 50)
vCls2.info = "저격수 병사"
print(type(vCls2.info), vCls2.info);
vCls2.DisplayInfo();

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

vCls3 = ChildClass("포격수", 10, "BOMBER", "100", 100)
vCls3.info = "포격수 병사"
print(type(vCls3.info), vCls3.info);
vCls3.DisplayInfo();

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

코드 중간을 보면 클래스변수인 프로퍼티를 만들어 사용하는 것이 보인다.

파이썬의 데이터 관리는 자유도가 높고 관대한 측면이 있음을 보여준다.

하지만, 어디까지나 개발단계에서만 사용하는 것이 좋다.

이후 프로그램 관리단계에서 혼잡하고 번거로움만 늘어나기 때문이다.

프로퍼티를 이렇게 추가할수도 있구나 하는 것만 알도록 하자.

결과 화면을 보자.

이전의 결과와 별 차이는 없다.

코드 중간에 들어간 프로퍼티는 추후 개발테스트가 끝나기 전 오픈전에는 클래스에 담아 사용하는 것이 좋다.

반응형

댓글