클래스 상세 이해(상속, 다중상속)
클래스 상세 이해(상속, 다중상속)
예제 코드
# Section07-2
# 파이썬 클래스 상세 이해
# 상속, 다중상속
# 예제1
# 상속 기본
# 슈퍼클래스 및 서브클래스 -> 모든 속성, 메소드 사용 가능
class Car:
"""Parent Class"""
def __init__(self, tp, color):
self.type = tp
self.color = color
def show(self):
# print('Car Class "Show" Method!')
return 'Car Class "Show" Method!'
class BmwCar(Car):
"""Sub Class"""
def __init__(self, car_name, tp, color):
super().__init__(tp, color) # super() 부모 클레스
self.car_name = car_name
def show_model(self) -> None: # -> 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(self):
super().show()
return 'Car Info : %s %s %s' % (self.car_name, self.color,self.type)
def show_model(self) -> None:
return 'Your Car Name : %s' % self.car_name
# 일반 사용
print("#==== 일반사용 ====")
model1 = BmwCar('520d', 'sedan', 'red')
print(model1.color) # Super
print(model1.type) # Super
print(model1.car_name) # Sub
print(model1.show()) # Super
print(model1.show_model()) # Sub
print()
# Method Overriding
print("#==== Method Overriding ====")
model2 = BenzCar("220d", 'suv', 'black')
print(model2.show())
# 부모와 자식 클레스에 똑같은 메소드가 있으면 자식 메소드가 호출됨
print()
# Parent Method Call
print("#==== Parent Method Call ====")
model3 = BenzCar("350s", 'sedan', 'silver')
print(model3.show())
print()
# Inheritance Info
print("#==== Inheritance Info ====")
print('Inheritance Info : ', BmwCar.mro())
print('Inheritance Info : ', BenzCar.mro())
print()
# 예제2
# 다중 상속
print("#==== 다중 상속 ====")
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
# .mro() -> 상속형태를 List형으로 반환한다.
print(M.mro())
print(A.mro())
실행 콘솔
#==== 일반사용 ====
red
sedan
520d
Car Class "Show" Method!
Your Car Name : 520d
#==== Method Overriding ====
Car Info : 220d black suv
#==== Parent Method Call ====
Car Info : 350s silver sedan
#==== Inheritance Info ====
Inheritance Info : [<class '__main__.BmwCar'>, <class '__main__.Car'>, <class 'object'>]
Inheritance Info : [<class '__main__.BenzCar'>, <class '__main__.Car'>, <class 'object'>]
#==== 다중 상속 ====
[<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'>]
Tip