[숙제] 상속 예제 정리

상속 예제 정리

상속은 부모 클래스가 가지고 있는 변수와 메소드를 자식 클래스가 물려받아 사용할 수 있는 개념이다.

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

자식 클래스는 부모 클래스의 기능을 사용할 수 있다. 하지만 부모 클래스는 자식 클래스의 기능을 사용할 수 없다.

즉, 전사는 모험가의 일반 공격을 사용할 수 있지만, 모험가는 전사의 강한 베기를 사용할 수 없다.