Programming/Python

[Python] 파이썬 클래스 상속에 대해서 알아보자.

빙기때침식곡 2021. 7. 26. 00:50
반응형

이미지 출처 www.python.org

 

오늘은 파이썬에서 클래스의 특징인 상속에 대해서 알아보는 시간을 갖도록 하겠다.

 

예제1.

 - 부모클래스(슈퍼클래스)를 상속받으면 슈퍼클래스 및 서브클래스의 모든 속성, 메소드 사용 가능

class Car:
    """Parent Class"""
    def __init__(self, tp, color):
        self.type = tp
        self.color = color


    def show(self):
        return 'Car Class "Shor 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
# "red"

print(model1.type)  # Super
# "sedan"

print(model1.car_name) # Sub
# "520d"

print(model1.show()) # Super
# "Car Class "Shor Method!""

print(model1.show_model()) # Sub
# "Your Car Name : 520d"

print(model1.__dict__)
# "{'type': 'sedan', 'color': 'red', 'car_name': '520d'}"

# Method Overriding(오버라이딩)

model2 = BenzCar("220d", "suv", "black")
print(model2.show())
# "Car Class "Shor Method!""
# "Car Info : 220d suv black"

# Parent Method Call

model3 = BenzCar("350s", "sedan", "silver")
print(model3.show())
# "Car Class "Shor Method!""
# "Car Info : 220d suv black"


# Inheritance Info (상속정보 -> 리스트로 반환)
print(BmwCar.mro())
# "[<class '__main__.BmwCar'>, <class '__main__.Car'>, <class 'object'>]"

print(BenzCar.mro())
# "[<class '__main__.BenzCar'>, <class '__main__.Car'>, <class 'object'>]"

 

 

예제2. 다중 상속

class X():
    pass


class Y():
    pass

class Z():
    pass

class A(X, Y):
    pass


class B(Y, Z):
    pass

class M(B, A, Z):
    pass


print(M.mro())
print(A.mro())

Result

[<class '__main__.M'>, <class '__main__.B'>, <class '__main__.A'>, <class '__main__.X'>, <class '__main__.Y'>, <class '__main__.Z'>, <class 'object'>]
[<class '__main__.A'>, <class '__main__.X'>, <class '__main__.Y'>, <class 'object'>]
반응형