인프런 커뮤니티 질문&답변

pigi-1004님의 프로필 이미지
pigi-1004

작성한 질문수

프로그래밍 시작하기 : 파이썬 입문 (Inflearn Original)

super() 함수에 관한 질문

작성

·

145

0

안녕하세요 이번 강의를 듣고 있는 수강생입니다. 다름이 아니라 클래스쪽 공부를 지속하다가 질문 사항이 있어서 등록합니다. 

super() 기능에 대해서 궁금해서 밑에 예시 자료 같이 씁니다. 

class Test_Parent:

    def __init__(self,a,b):

        self.a = a

        self.b = b

    def sum(self):

        return self.a+self.b

class Test_Child(Test_Parent):

    def __init__(self,a,b):

        super().__init__(a,b) => #Test_Parent 내 생성자 변수를 같은 형식으로 상속.

    def sum(self):

        return super().sum() => #Test_Parent내에 sum 함수내 self.a+self.b를 super().sum()으로 상속. 

질문.

1.  제가 나름 이해한 토대로 주석을  넣었는데 제가 제대로 이해 한 것이 맞는건가요? 

2. 사실상 이 예시에는 나오지 않지만 super()를 쓰지 않고 그냥 자식 객체를 통해서 불러올 수도 있는데, 굳이 super() 함수를 사용하는 이유가 매서드 오버라이딩을 좀 더 용이하기 위해서, 또는 타인이 보았을 때 매서드 간에 확실한 상속 관계를 나타내기 위해서 사용하는건가요?

3. 자식 생성자에 super()를 생성하면, 부모 생성자에는 영향이 없는것이 맞나요?  

답변 3

0

좋은사람님의 프로필 이미지
좋은사람
지식공유자

네 동일합니다.

0

pigi-1004님의 프로필 이미지
pigi-1004
질문자

답변 정말 감사합니다!

한가지만 더 여쭤봐도 될가요?

예시 자료에서 보여주신 것 중에 'ChildA' ,'ChildB'는 표현 방식만 다를 뿐 다른 차이점이 없는건가요?

그리고 제가 올린 예시 자료 또한  'super().__init__(a,b)' 또한 ChildA' ,'ChildB 표현 방식만 다를 뿐 동일하게 작동하는게 맞는건가요?

직접 쳐서 확인해봤는데 결과 값은 같아서요  

알려주시면 감사하겠습니다 ㅠㅠ

0

좋은사람님의 프로필 이미지
좋은사람
지식공유자

좋은 질문입니다.

1. 맞습니다.

2. 다중 상속일 경우에는 super()메소드를 직접적으로 호출 할 수 있습니다.

3. 네 없습니다. 부모생성자에서 초기값을 받을 경우 super를 사용할 수 있습니다.

class Base(object):
    def __init__(self):
        print "Base created"

class ChildA(Base):
    def __init__(self):
        Base.__init__(self)

class ChildB(Base):
    def __init__(self):
        super(ChildB, self).__init__()

ChildA() 
ChildB()
pigi-1004님의 프로필 이미지
pigi-1004

작성한 질문수

질문하기