기존 클래스를 바탕으로 새 클래스를 만들어요
객체·init·self·메서드를 배웠어요. 기본 계산을 공유하면서 한 부분만 달라질 때 상속을 사용할 수 있어요. 괄호 안의 Record는 기반 클래스예요.
class Record:
def __init__(self, units):
self.units = units
def points(self):
return self.units * 2
class RewardRecord(Record):
pass
RewardRecord는 Record의 초기화와 points를 물려받아요. RewardRecord(3).points()는 6이에요. pass는 이 레슨에서 처음 등장한 기능이 아니라 첫 객체 레슨의 빈 본문 표현이에요. 세 번째 페이지에서 공통 계산에 보너스를 더하는 관계를 확인해요.
super로 기반 클래스의 초기화를 호출해요
보너스를 저장하려면 RewardRecord 안에 초기화 메서드를 다시 정의해요.
def __init__(self, units, bonus):
super().__init__(units)
self.bonus = bonus
super()는 현재 상속 구조에서 기반 클래스의 동작을 호출할 때 써요. 이 예제의 super().init(units)는 Record의 초기화를 실행해 self.units를 설정해요. 이어 self.bonus를 저장해요. RewardRecord(3, 5)객체는 units = 3, bonus = 5를 함께 가져요.
같은 메서드 이름의 동작을 바꿔요
RewardRecord의 points를 다시 정의하면 그 객체는 새 메서드를 사용해요. 이를 오버라이드라고 해요.
def points(self):
return super().points() + self.bonus
같은 예제에서는 super().points()가 3×2인 6을 반환하고 bonus 값 5를 더해 11이 돼요. 기반 객체 Record(3)의 points는 6 그대로예요. self.points()를 자기 points 안에서 호출하면 같은 메서드를 끝없이 다시 호출할 수 있어요. 기반 동작을 재사용하려면 super를 구분해서 써요.
직접 풀어봐요
Record는 units×2를 점수로 반환해요. RewardRecord는 Record를 상속하고 기반 점수에 bonus를 더해 반환해요. 두 클래스를 정의하고 같은 units의 기본 객체 점수와 보너스 객체 점수를 각 한 줄에 출력해요.
첫 줄 units(01000), 둘째 줄 bonus(01000)이에요.
예시 1: units = 3, bonus = 5 → 출력 줄 6, 11이에요.
예시 2: units = 7, bonus = 2 → 출력 줄 14, 16예요.
예시 입력
3 5
예상 결과
6 11
예시 입력
7 2
예상 결과
14 16
핵심 개념
oop-inheritance-poly: 상속·super·오버라이드를 구분해 기반 객체 동작을 유지하면서 보너스 객체의 계산을 확장해요.