부모 클래스의 생성자를 호출하려면 꼭 자기 자신을 써줘야 하나요?


C가 B를 상속하고 B가 A를 상속하는 구조에서 부모 클래스의 생성자를 호출하는 방법이 이거밖에 없나요?

소스코드

class A(object):
    def __init__(self):
        print "생성자 A"

class B(A):
    def __init__(self):
        super(B,self).__init__()
        print "생성자 B"

class C(B):
    def __init__(self):
        super(C,self).__init__()
        print "생성자 C"

c = C()

super(B,self).__init__()같이 클래스마다 자기가 누군지 설명하는 거 말고

super(self.__class__, self)같은 느낌으로 좀 기계적이었으면 좋겠습니다.

super(self.__class__, self)를 쓰면 B에서 super를 호출할 때 self.__class__가 여전히 C여서 쓸 수가 없네요

다중상속은 안할거라서 다중상속에 관한 얘기는 사양합니다

  • 2016년 02월 04일에 작성됨

조회수 207


1 답변


좋아요
0
싫어요
채택취소하기

3.x에서는 단순히 super().__init__(args)로 쓸 수 있지만 2.x에서는 방법이 없습니다.

그리고 super(B,self).__init__()처럼 쓰는게 사실 파이썬 철학에 맞는 거기도 하고요.

PEP 20 -- The Zen of Python에서

... Explicit is better than implicit ...

이런 구절이 있습니다 (안 보이게 처리하는 것보다는 보이게 처리하는 게 더 낫다)

  • 2016년 02월 04일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close