[패스트캠퍼스python] 상속, 다중상속

[패스트캠퍼스python] 상속, 다중상속

파이썬 인강 : 상속, 다중상속

파이썬 클래스 상세 이해 : 상속, 다중상속

상속은 부모한테서 물려받는 것을 뜻한다
자식이 부모의 속성과 매서드를 사용할 수 있는 것이다

상속과 다중상속

1. 상속 기본

슈퍼클래스(Parent Class) 및 서브클래스(자식 Class) -> 모든 속성, 메소드 사용 가능

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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): # 괄호안에 Parent클래스명을 넣어주면 상속이 됨
"""Sub Class"""

def __init__(self, car_name, tp, color):
super().__init__(tp, color) # super()가 바로 Parent class이다. 상속받아야할 tp와 color를 가져와야한다
self.car_name = car_name

def show_model(self) -> None:
return 'Your Car Name : %s' % self.car_name




2. 상속의 일반적인 사용

아래처럼 인스턴스를 먼저 생성한 후 print해보자

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
model1 = BmwCar('520d', 'sedan', 'red')

print(model1.color) # 컬러는 sub클래스에 없고 Super클래스에 있다
print(model1.type) # Super
print(model1.car_name) # Sub
print(model1.show()) # Super : Super클래스의 매서드도 사용가능
print(model1.show_model()) # Sub
print(model1.__dict__)

# 출력값은
red
sedan
520d
Car Class "Show" Method!
Your Car Name : 520d
{'type': 'sedan', 'color': 'red', 'car_name': '520d'}
  1. Method Overriding
    다른 sub클래스를 만들어보자
    이번에는 sub클래스에 show()라는 매서드를 만들어서 super클래스의 show()매서드와 중복되면 뭐가 실행될지 확인해보자
1
2
3
4
5
6
7
8
9
10
11
12
13
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() # super클래스의 매서드도 같이 불러온다
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

sub클래스를 만들었으니 인스턴트 생성 후 print해보자

1
2
3
4
5
6
print()
model2 = BenzCar("220d", 'suv', 'black')
print(model2.show())

# 출력값은
Car Info : 220d black suv

출력값에서도 알수있듯이 super클래스의 모든 것을 사용하는 것이 아니라 sub클래스 입맛에 맞게 기능을 개선하거나 추가 등이 가능하다.
이렇게 코드를 재활용이 가능하다

  1. Parent Method Call
1
2
3
4
5
model3 = BenzCar("350s", 'sedan', 'silver')
print(model3.show())

# 출력값은
Car Info : 350s silver sedan
  1. Inheritance Info
    상속정보를 리스트형태로 나타내주는 매서드이다
    상속정보 확인할때 자주 사용한다

1
2
3
4
5
6
print('Inheritance Info : ', BmwCar.mro())
print('Inheritance Info : ', BenzCar.mro())

# 출력값은
Inheritance Info : [<class '__main__.BmwCar'>, <class '__main__.Car'>, <class 'object'>]
Inheritance Info : [<class '__main__.BenzCar'>, <class '__main__.Car'>, <class 'object'>]




3. 다중 상속

보통 두 번 정도 상속을 한다. 깊은 상속은 오히려 가독성이 떨어진다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
print()
class X():
pass

class Y():
pass

class Z():
pass

class A(X, Y): #클래스A는 클래스X,Y를 상속받겠다
pass

class B(Y, Z):
pass

class M(B, A, Z): # 위의 모든 클래스를 상속받음
pass

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

다중상속 출력값

출력값은 아래 이미지와 같다.
M의 경우 모든 클래스에 접근이 가능한 것을 볼 수 있다