작성
·
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
답변 정말 감사합니다!
한가지만 더 여쭤봐도 될가요?
예시 자료에서 보여주신 것 중에 '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()