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

상속 — 부모의 기능을 물려받기 ★★★

상속(inheritance)은 기존 class(부모)의 attribute와 method를 새 class(자식)가 그대로 물려받아 쓰는 방법이에요. 자식은 class Dog(Animal):처럼 클래스 이름 뒤 괄호에 부모 이름을 적어요. 읽는 법은 "Dog는 Animal을 상속한다"예요.

비유 — 가업 물려받기

부모 가게(Animal)의 레시피와 도구를 자식 가게(Dog)가 그대로 물려받아요. 자식은 거기에 자기만의 메뉴(bark)를 추가하거나, 같은 이름 메뉴를 자기 방식으로 바꿀 수 있어요. 물려받은 것을 매번 다시 만들 필요가 없어서 편해요. 동물 종이 1,000개일 때 이름 같은 공통 기능을 부모에 한 번만 쓰면 돼요(교수님 설명).

class Animal: def __init__(self, name): self.name = name def eat(self): print(f"{self.name}가 밥을 먹습니다.") class Dog(Animal): def bark(self): print(f"{self.name}가 멍멍 짖습니다.") dog = Dog("Bori") print("name:", dog.name) dog.eat() dog.bark()
name: Bori Bori가 밥을 먹습니다. Bori가 멍멍 짖습니다.
코드 줄무슨 뜻
class Dog(Animal):Dog는 Animal의 자식. Dog에는 bark만 직접 적혀 있어요
dog = Dog("Bori")Dog에는 __init__이 없으니 부모의 __init__이 실행돼서 name = "Bori"가 저장돼요
dog.nameBori. 부모의 __init__이 만든 attribute예요
dog.eat()Dog에 eat가 없으니 부모 Animal의 eat를 찾아 실행해요
dog.bark()Dog에 직접 정의된 bark 실행

메서드를 찾는 순서는 이래요. ① 자식 class에서 먼저 찾고, ② 없으면 부모 class에서 찾아요. 부모의 메서드가 자식에게 "복사되는" 것이 아니라 못 찾으면 부모에게 가서 찾는 거예요.

반대는 안 돼요. 부모의 객체는 자식에만 있는 메서드를 못 써요. 위 예에서 Animal("Zzz").bark()는 "Animal에는 bark가 없다"는 에러(AttributeError)예요. 부모는 공통 기능, 자식은 공통 기능 + 자기만의 기능을 가져요.

class Character: def __init__(self, name, health): self.name = name self.health = health def take_damage(self, amount): self.health = max(0, self.health - amount) print(f"{self.name}의 체력: {self.health}") class Wizard(Character): def __init__(self, name, health, mana): super().__init__(name, health) self.mana = mana def use_magic(self): if self.mana >= 10: self.mana -= 10 print(f"마법 사용, 남은 mana: {self.mana}") else: print("mana가 부족합니다.") wizard = Wizard("Merlin", health=80, mana=20) wizard.take_damage(15) wizard.use_magic()
Merlin의 체력: 65 마법 사용, 남은 mana: 10
실행하는 줄무슨 뜻
Wizard("Merlin", health=80, mana=20)Wizard의 __init__ 실행. 이름표를 붙여 넘긴 값(health=80, mana=20)도 자리가 맞는 칸에 들어가요
super().__init__(name, health)부모(Character)의 __init__을 실행해 name, health를 저장
self.mana = mana자식만의 attribute 저장
wizard.take_damage(15)Wizard에 없으니 부모의 take_damage 실행. 80−15 = 65 → "Merlin의 체력: 65"
wizard.use_magic()자식의 메서드. mana 20 ≥ 10 → 10을 빼서 mana = 10 → "마법 사용, 남은 mana: 10"
시험엔 이렇게 써요 — 이렇게 고르세요

상속은 기존 class의 attribute와 method를 새 class에서 재사용하는 방법이다. 자식 class에서 메서드를 찾지 못하면 부모 class에서 찾아 사용한다(복사되는 것이 아니다). 부모 instance는 자식에만 있는 메서드를 사용할 수 없다.

잠깐 확인 — Dog 클래스에 eat 메서드가 없는데 dog.eat()을 부르면 왜 실행되나요?

자식에서 못 찾으면 부모(Animal)에서 찾아 쓰기 때문이에요. 부모의 eat가 실행돼요.

다음 카드 → super().__init__() — 부모의 __init__은 자동으로 안 불려요 ★★★ 시험 단골

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