상속 예제 정리
상속은 부모 클래스가 가지고 있는 변수와 메소드를 자식 클래스가 물려받아 사용할 수 있는 개념이다.
1. 인사관리 상속 예제
직원 클래스에는 모든 직원이 공통으로 가지는 이름과 사번을 변수로 만들고, 임원급, 팀장급, 하위급 직원은 직원 클래스를 상속받아 각자의 역할을 따로 만든다.
# 부모 클래스 (공통 직원 정보)
class Employee:
# 직원 이름 저장
def __init__(self, name):
self.name = name
# 모든 직원이 공통으로 하는 업무
def common_work(self):
print(f"{self.name}님이 기본 업무를 수행합니다.")
# 임원 클래스
class Executive(Employee):
# 임원 전용 업무
def part_work(self):
print(f"{self.name}님이 회사의 중요한 의사결정을 합니다.")
# 팀장 클래스
class TeamLeader(Employee):
# 팀장 전용 업무
def part_work(self):
print(f"{self.name}님이 팀원들에게 업무를 분배합니다.")
# 사원 클래스
class Staff(Employee):
# 사원 전용 업무
def part_work(self):
print(f"{self.name}님이 실무 업무를 수행합니다.")
# 직원 이름 입력
name = input("직원 이름을 입력하세요: ")
# 직급 입력
part = input("직급을 입력하세요 (임원 / 팀장 / 사원): ")
# 입력한 직급에 따라 객체 생성
if part == "임원":
worker = Executive(name)
elif part == "팀장":
worker = TeamLeader(name)
elif part == "사원":
worker = Staff(name)
# 없는 직급 입력 시 종료
else:
print("없는 직급입니다.")
exit()
# 메뉴 반복
while True:
# 업무 선택
work = input("(1) 공통 업무 (2) 직급 업무 (3) 종료 : ")
# 부모 클래스 공통 업무
if work == "1":
worker.common_work()
# 직급별 업무
elif work == "2":
worker.part_work()
# 종료
elif work == "3":
print("프로그램 종료")
break
# 예외 처리
else:
print("잘못된 입력입니다.")
실행 결과
직원 이름을 입력하세요: 김예지
직급을 입력하세요 (임원 / 팀장 / 사원): 팀장
(1) 공통 업무 (2) 직급 업무 (3) 종료 : 1
2. 게임 전직 시스템 상속 예제
모험가 클래스에는 모든 직업이 공통으로 사용할 수 있는 일반 공격을 만들고, 전사, 법사, 힐러는 모험가 클래스를 상속받아 각자의 직업 스킬을 따로 만든다.
# 부모 클래스 (공통 기능)
class Adventurer:
# 객체가 생성될 때 플레이어 이름 저장
def __init__(self, name):
self.name = name
# 모든 직업이 공통으로 사용하는 일반 공격
def normal_attack(self):
print(f"{self.name}이(가) 일반 공격을 했다!")
# 전사 클래스 (모험가 상속)
class Warrior(Adventurer):
# 전사 전용 직업 공격
def job_attack(self):
print(f"{self.name}이(가) 전사의 직업 공격을 했다!")
# 법사 클래스 (모험가 상속)
class Mage(Adventurer):
# 법사 전용 직업 공격
def job_attack(self):
print(f"{self.name}이(가) 법사의 직업 공격을 했다!")
# 힐러 클래스 (모험가 상속)
class Healer(Adventurer):
# 힐러 전용 직업 공격
def job_attack(self):
print(f"{self.name}이(가) 힐러의 직업 공격을 했다!")
# 플레이어 이름 입력
name = input("플레이어 이름을 입력하세요: ")
# 직업 선택 입력
job = input("직업을 선택해주세요 (전사 / 법사 / 힐러): ")
# 입력한 직업에 따라 해당 클래스 객체 생성
if job == "전사":
player = Warrior(name)
elif job == "법사":
player = Mage(name)
elif job == "힐러":
player = Healer(name)
# 없는 직업 입력 시 종료
else:
print("없는 직업입니다.")
exit()
# 공격 메뉴를 계속 반복 실행
while True:
# 공격 선택 메뉴
attack = input("(1) 일반공격 (2) 직업공격 (3) 종료 : ")
# 1 입력 시 부모 클래스의 일반 공격 실행
if attack == "1":
player.normal_attack()
# 2 입력 시 직업별 공격 실행
elif attack == "2":
player.job_attack()
# 3 입력 시 게임 종료
elif attack == "3":
print("게임 종료")
break
# 잘못된 숫자 입력 시 안내 문구 출력
else:
print("잘못된 입력입니다.")
실행 결과
플레이어의 닉네임을 입력해주세요 /
직업을 선택하세요
(1) 일반공격 , (2) 직업공격
1 선택 : 일반 공격을 하였습니다.
2 선택 : 00이 00 스킬 000을 사용하였습니다.
3. 반대로 모험가는 전사 스킬을 사용할 수 있을까?
사용할 수 없다. 부모 클래스는 자식 클래스에 있는 기능을 알 수 없기 때문이다.
adventurer = Adventurer()
adventurer.power_strike() # 오류 발생
정리
Adventurer
├─ Warrior
├─ Mage
└─ Healer
자식 클래스는 부모 클래스의 기능을 사용할 수 있다. 하지만 부모 클래스는 자식 클래스의 기능을 사용할 수 없다.
즉, 전사는 모험가의 일반 공격을 사용할 수 있지만, 모험가는 전사의 강한 베기를 사용할 수 없다.
'개발일지 > python' 카테고리의 다른 글
| [Python] QScrollArea (0) | 2026.05.27 |
|---|---|
| [Python] PySide6 QTabWidget 실습 / 파일 분리 (0) | 2026.05.22 |
| [개인 프로젝트/파이썬] QT 디자인툴을 이용한 Travel Log 개발 진행 보고서 (0) | 2026.05.12 |
| 간단한 프로그램 만들기 5번 (0) | 2026.04.17 |
| 함수 예제 ,과제 풀이 (0) | 2026.04.16 |