[Python] - 상속

김진수·2020년 11월 17일
0
post-thumbnail
post-custom-banner

상속이기 때문에 부모와 자식클래스가 존재합니다. 상속하는 쪽이 부모, 상속을 받는 쪽이 자식이며 부모를 슈퍼클래스, 자식을 서브클래스라고 합니다.

상속

기본 상속은 슈퍼클래스(부모) 및 서브클래스(자식)이 모든 속성과 메소드를 사용할 수 있습니다. 이해가 어려우실거 같아서 자동차로 예를 들겠습니다. 자동차의 속성에는 color, type등이 있습니다. 이를 부모클래스라고 생각하고 자동차에는 bmw 자동차, benz 자동차등이 있습니다. 이를 서브클래스라고 하면 서브클래스들은 결국 부모클래스가 가지는 속성을 다 가지고 있기때문에 서브클래스에서 따로 선언하기 보다는 상속을 통해 부모클래스 속성을 서브클래스에서 사용가능하게 되면 코드 중복을 줄일 수 있고 코드 간결성도 높아집니다.

상속하는 방법은 자식클래스에 매개변수를 부모클래스로 지정하면 됩니다. 그다음에는 인스턴스변수 생성메서드인 __init__메서드를 super.__init__으로 지정하면 super가 부모클래스를 뜻하기 때문에 매개변수로 지정한 클래스가 부모클래스로 지정되어 상속되게 됩니다. 예를 보시면 바로 이해할 수 있습니다.
class Car:
    """parent class"""
    def __init__(self, tp, color):
        self.type = tp
        self.color = color
        
    def show(self):
        return 'car class "show method!"'
    
    
    
class BmwCar(Car):
    """sub class"""
    def __init__(self,car_name, tp, color):
        super().__init__(tp,color)
        self.car_name = car_name
        
    def show_model(self) -> None:
        return """your car name : %s""" % self.car_name
    
    
class BenzCar(Car):
    """sub class"""
    def __init__(self,car_name, tp, color):
        super().__init__(tp,color)
        self.car_name = car_name
        
    def show_model(self) -> None:
        return """your car name : %s""" % self.car_name
    def show(self):
        print(super().show())
        return "car info : %s %s %s" %(self.car_name, self.type, self.color)
        
model1 = BmwCar('520d', 'sedan', 'red')
print(model1.color) # super
print(model1.car_name) # sub
print(model1.show()) # super
print(model1.show_model()) # sub

설명하자면

def __init__(self,car_name, tp, color):
        super().__init__(tp,color)
        self.car_name = car_name

이 부분에서 super().init(tp,color)는 외부에서 받아온 값을 자식클래스에서 선언이 되는 것이 아닌 super().init(tp,color)를 통해 부모클래스에서 선언이 되고 자식클래스에서 부모클래스 변수를 사용할 수 있게 되는 것입니다.

print(model1.color) # super

이 부분은 model1이 BmwCar클래스 객체이지만 상속을 통해 부모클래스속성을 사용할 수 있으므로 color를 출력하면 부모클래스에 있는 color속성이 출력되는 부분입니다.

print(model1.car_name) # sub

이 부분은 상속이 됐지만 부모클래스 속성에는 car_name이 없기 때문에 자식클래스에 있는 car_name이 출력이 된것입니다.

print(model1.show()) # super

이 부분은 상속이 됐으므로 부모클래스에 있는 show()메서드가 출력되는 부분입니다.

print(model1.show_model()) # sub

show_model()은 부모, 자식클래스에 모두 있는 메서드인데 상속 특성상 메서가 중복이 되면 자식클래스에 있는 것이 우선하기 때문에 자식클래스에 있는 show_model()이 출력되는 부분입니다.

profile
백엔드 개발자
post-custom-banner

0개의 댓글