Super

2022. 8. 16. 18:50PYTHON

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.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()
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()
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()  
 
# 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()  
 
# 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