(Python3) super()와 super(A, self)의 차이는 무엇인가요?
조회수 8647회
class A:
def __init__(self):
print("A")
class B(A):
def __init__(self):
super().__init__()
b = B()
class A:
def __init__(self):
print("A")
class B(A):
def __init__(self):
super(B, self).__init__()
b = B()
이런 두 가지 방법을 사용하였을 때 출력 값은 같습니다. 그렇다면 무슨 차이인가요?
그리고
class A:
def __init__(self):
print("A")
class B(A):
def __init__(self):
A.__init__()
b = B()
이 코드가 작동하지 않는 이뉴느 무엇인가요?
-
(•́ ✖ •̀)
알 수 없는 사용자
1 답변
-
한가지 클래스만을 상속하는 경우에도 super() 코드의 장점이 있습니다. 만약에 super(B, self) 형식으로 코딩할 경우, 클래스 이름을 변경해야 할 일이 있다면, super(B, self) 구문도 변경해야 합니다. super() 코드를 쓸 경우 그럴 일이 없습니다. 또한, 다이아몬드형 다중 상속, 즉 A를 상속한 B와 A를 상속한 C를 둘 다 상속한 D를 구현하는 경우 super() 코드를 사용하지 않으면 문제가 생깁니다. 우선 super(B, self)의 꼴로 두 부모 클래스의 생성자를 부를 수가 없습니다. 그리고
B.__init__(self)
C.__init___(self)
꼴로 부르더라도 A의 생성자가 두 번 호출되어 뜻대로 프로그램이 움직이지 않는 버그가 나거나 코드가 반복되어 지연이 발생하게 됩니다. super()를 사용하면 그럴 일이 없습니다. 모든 부분에 super()를 사용하면 코딩도 간편하고 기능적으로도 좋습니다. 마지막 코드의 경우,A.__init__(self)
라고 입력하는 경우 실행됩니다만 권장하지 않습니다.-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력