부모 클래스의 생성자를 호출하려면 꼭 자기 자신을 써줘야 하나요?
조회수 4957회
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여서 쓸 수가 없네요
다중상속은 안할거라서 다중상속에 관한 얘기는 사양합니다
1 답변
-
3.x에서는 단순히
super().__init__(args)
로 쓸 수 있지만 2.x에서는 방법이 없습니다.그리고
super(B,self).__init__()
처럼 쓰는게 사실 파이썬 철학에 맞는 거기도 하고요.... Explicit is better than implicit ...
이런 구절이 있습니다 (안 보이게 처리하는 것보다는 보이게 처리하는 게 더 낫다)
댓글 입력