상세 컨텐츠

본문 제목

[Python] 클래스 실습예제

Python

by TUZA 2022. 6. 14. 00:27

본문

해당 클래스 실습예제를 요약해보면 다음과 같다.

- 플레이어를 생성한다. 생성 시 닉네임, 미네랄, 가스를 입력받는다.

- 플레이어는 유닛을 생성할 수 있다. 유닛 생성은 produce() 메서드를 이용한다.

- 유닛 생성에 필요한 미네랄과 가스는 unit_info를 이용한다.

- 유닛을 생성한 미네랄과 가스만큼을 플레이어가 가지고 있는 미네랄과 가스에서 뺀다.

 

아래 클래스를 구현할 때 Unit(Player) 로 상속을 했었는데 다시 생각해보면 멍청한 짓이였다.

Player 속성은 Unit에겐 필요없는 속성이다. 즉, Player has-a Unit 관계이다.

# 유닛 정보
unit_info = {
    "probe":{
        "name":"프로브",
        "mineral": 50,
        "gas": 0,
        "hp":20,
        "shield": 20,
        "demage": 5
    },
        "zealot":{
        "name":"질럿",
        "mineral": 100,
        "gas": 0,
        "hp":100,
        "shield": 60,
        "demage": 16
    },   
     "dragon":{
        "name":"드라군",
        "mineral": 125,
        "gas": 50,
        "hp":100,
        "shield": 80,
        "demage": 20
    }
}
# 유닛 클래스
class Unit:
    '''
    속성 : 이름, 체력, 방어막, 공격력
    '''
    def __init__(self, name, hp, shield, demage):
        self.name = name
        self.hp = hp
        self.shield = shield
        self.demage = demage
    def __str__(self) :
        return f"[{self.name}] 체력: {self.hp} 방어막: {self.shield} 공격력: {self.demage}" 

# 플레이어 클래스
class Player:
    '''
    속성 : 닉네임, 미네랄, 가스
    메서드 : 유닛 생산하기
    '''
    def __init__(self,nick_name,mineral,gas, unit_list = []):
        self.nick_name =nick_name
        self.mineral = mineral
        self.gas = gas
        self.unit_list = unit_list

    def produce(self, name,mineral,gas,hp,shield,demage):
        if self.mineral - mineral  < 0:
            print("미네랄이 부족합니다.")
        elif self.gas - gas < 0:
            print("가스가 부족합니다.")
        else:
            self.mineral -= mineral
            self.gas -= gas
            unit = Unit(name,hp,shield,demage)
            self.unit_list.append(unit)
반응형

'Python' 카테고리의 다른 글

[Python] request 라이브러리  (0) 2022.06.14
[Python] 상속  (0) 2022.06.14
[Python] map, filter 함수  (0) 2022.06.11
[Python] 람다함수  (0) 2022.06.10
[Python] 함수의 다양한 매개변수  (0) 2022.06.10

관련글 더보기