파이썬[Python]: 내장함수 - super 함수

내장함수 - super 함수(function)


/// 설명

상위(parent) 클래스나 등위(sibling) 클래스의 메서드 호출을 위임하는 객체(중계기능)를 반환합니다.(속성(attribute)에도 사용할 수 있습니다.)
super() 는 __mro__ 에서 반환하는 우선순위 중, 상위 클래스에서 처음나오는 메서드를 호출하며, 모든 상위 클래스에 메서드가 존재하지 않으면 오류를 발생시킵니다.
ex) class A -> class B -> class C -> object
class A에서 super()를 사용할 경우 B, C, object 순으로 탐색을 하고, 그 중 가장 먼저 나오는 메서드를 호출합니다. 만약 없으면 오류를 발생시킵니다.

클래스 내부에서 사용시 상위 클래스가 단일하다면, super().method() 형태로 사용하시면 되고, 상위 클래스가 둘 이상이라면, super(type, object).method() 형태로 사용하시면 됩니다.

참고: __mro__

※ 형식
class super([type[, object-or-type]])

reference
https://docs.python.org/3/library/functions.html

/// 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class A(object):  # base class A
    def a(self):
        print('test A')
 
 
class B(A):
    def a(self):
        print('test B')
 
 
if issubclass(B, A):
    print(A.__mro__)  # (<class '__main__.A'>, <class 'object'>)
    print(B.__mro__)  # (<class '__main__.B'>, <class '__main__.A'>, <class '__main__.C'>, <class 'object'>)
    test = super(A, B)
    print(test)  # <super: <class 'A'>, <B object>>
 
 
= B()
if isinstance(b, B):
    test = super(B, b)
    print(test)  # <super: <class 'B'>, <B object>>
    test.a()  # test A
 
cs

/// 예제 클래스 내부에서 사용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class A(object):  # base class A
    def a(self):
        print('test A')
 
 
class B(A):
    def a(self):
        super().a()
        print('test B')
 
 
= B()
b.a()  # test A
       # test B
 
 
class C(object):  # base class C
    pass
 
 
class D(object):  # another base class D
    def a(self):
        print('test D')
 
 
class E(C, D):
    def a(self):
        super(E, self).a()
        print('test E')
 
 
= E()
e.a()  # test D
       # test E
 
cs

/// 예제 자주 쓰이는 형태

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class A(object):  # base class A
    def __init__(self, a, str*args, **kwargs):
        self.a = a
        self.str = str
 
    def get_attr(self):
        return print('a:'self.a, ', str:'self.str)
 
 
class B(A):
    def __init__(self*args, **kwargs):
        super(B, self).__init__(*args, **kwargs)
 
 
= B(1'string')
b.get_attr()  # a: 1 , str: string
 
cs

* 실행환경: Microsoft Windows 10 Homes
* 인터프리터: 파이썬(Python 3.9)


– 당신을 응원합니다. –

댓글

이 블로그의 인기 게시물

파이썬[Python]: 내장함수 - from_bytes 메서드

파이썬[Python]: 내장함수 - __len__ 메서드

파이썬[Python]: kivy - 한글 사용

파이썬[Python]: 내장함수 - bit_length 메서드

C 언어: sin 함수, cos 함수, tan 함수