파이썬[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
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 = 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() 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() 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 = B(1, 'string') b.get_attr() # a: 1 , str: string | cs |
* 실행환경: Microsoft Windows 10 Homes
* 인터프리터: 파이썬(Python 3.9)
– 당신을 응원합니다. –
댓글
댓글 쓰기