시험공부빅데이터분석
← 보드클래스와 상속 · 7/12

오버라이딩 — 같은 이름 메서드를 자식이 새로 쓰기 ★★★ 시험 2번

자식 class가 부모와 같은 이름의 메서드를 새로 정의하면 호출할 때 자식 것이 먼저 쓰여요. 이것이 오버라이딩(overriding)(재정의)이에요. 앞에서 본 __init__을 자식이 다시 쓴 것도 오버라이딩이에요.

super와 오버라이딩
교수님 슬라이드 — super().__init__(...)은 부모 초기화를 호출. 같은 이름의 speak를 자식이 새로 정의하는 것이 method overriding

시험 샘플 2번 코드예요. 직접 따라가 봐요.

class Animal: def __init__(self, name): self.name = name def speak(self): print("동물이 소리를 냅니다.") class Dog(Animal): def __init__(self, name, breed): super().__init__(name) self.breed = breed def speak(self): print(f"{self.name}가 멍멍 짖습니다.") dog = Dog("Bori", "Poodle") dog.speak()
Bori가 멍멍 짖습니다.
실행하는 줄무슨 뜻
dog = Dog("Bori", "Poodle")Dog의 __init__ 실행. super().__init__(name)으로 부모가 name = "Bori" 저장, 이어서 breed = "Poodle" 저장
dog.speak()Dog에 speak가 있으니 자식 것이 실행돼요. 부모의 speak는 실행되지 않아요
출력Bori가 멍멍 짖습니다. 한 줄뿐이에요. "동물이 소리를 냅니다."는 찍히지 않아요

이제 선택지를 하나씩 판정해 볼게요.

선택지판정과 이유
① dog.speak()은 부모와 자식의 speak()을 차례로 실행한다틀림. 자식 것 하나만 실행돼요(부모 것은 호출하지 않아요)
② 자식이 __init__()을 정의해도 부모의 __init__()은 항상 자동으로 실행된다틀림. 자식이 정의하면 자동 실행되지 않아서 super()로 불러야 해요
③ Dog가 speak()를 재정의했으므로 부모의 speak()은 더 이상 호출할 수 없다틀림. Animal 객체로는 부모 speak를 쓸 수 있고, 자식 안에서 super().speak()로도 부를 수 있어요
④ super().__init__(name)은 부모의 초기화 메서드를 실행하며, dog.speak()은 자식이 재정의한 메서드를 실행한다맞음 (정답)
⑤ 상속받은 메서드를 쓰려면 먼저 Animal 인스턴스를 별도로 만들어야 한다틀림. Dog 객체가 상속받은 메서드를 이미 가지고 있어서 따로 만들 필요 없어요

③번의 super().speak()를 확인해 볼게요. 자식이 부모 기능을 먼저 쓰고 자기 일을 덧붙이는 모양이에요.

class Dog(Animal): def speak(self): super().speak() print("멍멍") Dog("Bori").speak()
동물이 소리를 냅니다. 멍멍

여기서는 자식이 직접 super().speak()를 호출했기 때문에 부모 것이 실행됐어요. 호출하지 않으면 실행되지 않는다는 점이 ①번의 오답 이유예요. 그리고 이름을 speak2처럼 바꾸면 다른 메서드가 새로 생길 뿐 오버라이딩이 아니에요.

시험엔 이렇게 써요 — 이렇게 고르세요

자식 class에 부모와 같은 이름의 메서드를 정의하면 자식의 메서드가 우선 사용되며 이를 오버라이딩이라고 한다. 이때 부모의 메서드는 호출되지 않는다(자식이 super()로 부를 때만 예외). 설명형 선택지는 "자동으로", "항상", "더 이상 ~할 수 없다" 같은 단정적인 표현이 있으면 반례를 먼저 떠올려 보세요.

잠깐 확인 — 자식 class에 부모와 같은 이름의 speak()를 만들고 dog.speak()을 호출하면 어느 것이 실행되나요?

자식의 speak()이에요. 같은 이름이면 자식 것이 우선이에요.

다음 카드 → __call__ — 객체를 함수처럼 부르기 ★★

자료: 3~4주차 · Week03_Class_for_PyTorch(pdf, ipynb 업데이트본) · 빅데이터03(3주차)·빅데이터04(4주차) 녹취