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

이 코드가 작동하지 않는 이뉴느 무엇인가요?

  • (•́ ✖ •̀)
    알 수 없는 사용자
  • super() is considered super 라는 격언 비슷한 게 있는데 구글에 검색해 보시면 도움이 될 겁니다. 알 수 없는 사용자 2018.8.8 00:04

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)라고 입력하는 경우 실행됩니다만 권장하지 않습니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)