Super
2022. 8. 16. 18:50ㆍPYTHON
Inheritance
상속
Python의 class간에는 상속이 가능
부모클래스의 내용을 자식이 가져다 쓸 수 있는 것
A 클래스 선언
1
2
3
4
5
6
7
|
# 부모 클래스 A
class A(object):
def __init__(self):
print("A")
def hello(self):
print("hello")
|
cs |
B 클래스 선언
1
2
3
4
5
6
7
8
9
10
|
class B(A):
def __init__(self):
print("B")
def hi(self):
print("hi")
b = B()
b.hello()
|
cs |
→ B클래스 선언시 A를 전달해주면, B는 A를 상속받게 됨
result
B
hello
=> 상속을 받게되면, B는 A의 함수들을 활용할 수 있게 됨
super()
상속 관계에서 상속의 대상인 부모클래스를 호출하는 함수
super()의 인자로 2개가 전달
→ 하위 클래스의 이름(B)과 하위 클래스의 객체(b) 필요
1
2
3
4
|
super(B,b).__init__()
# result
# A
|
cs |
Class선언 내부에서 super호출시,
인자 전달 없이 자동으로 해당 클래스의 부모클래스 호출
1
2
3
4
5
6
7
8
9
|
class B(A):
def __init__(self):
super().__init__()
print("B")
def hi(self):
print("hi")
b = B()
|
cs |
result
A
B
→ super()를 통해 A가 호출되고, A의 init함수가 호출됨
1
2
3
4
5
6
7
8
9
|
class B(A):
def __init__(self):
super(B, self).__init__()
print("B")
def hi(self):
print("hi")
b = B()
|
cs |
super()와 super(class, self) 차이
super는 2개의 parameter를 받는다.
super(하위 클래스이름, 하위 클래스의 객체)
→ 위의 예제 경우 출력결과가 같다
그러나 다중 상속 및 할머니 상속일 경우 출력결과가 다름
첫번째 매개변수의 클래스 이름에 따라 super가 탐색하는 범위가 달라짐
→ 아래 예제에서 A클래스는 C클래스이 할머니 상속
C클래스 추가
1
2
3
4
5
6
7
8
9
10
11
|
class C(B):
def __init__(self):
super(C, self).__init__() # C의 부모 클래스 호출
print("C")
c = C()
# result
# A
# B
# c
|
cs |
1
2
3
4
5
6
7
8
9
10
11
|
class C(B):
def __init__(self):
super(B, self).__init__() # B의 부모 클래스 호출
print("C")
# B는 건너뛰고 A 호출
c = C()
# result
# A
# c
|
cs |
참고 및 출처 : https://harry24k.github.io/super/ , https://leemoney93.tistory.com/37 ,
'PYTHON' 카테고리의 다른 글
Class (0) | 2022.08.16 |
---|---|
Format Function (0) | 2022.08.16 |
JUPYTER NOTEBOOK (0) | 2022.06.14 |