goodthings4me.tistory.com
[파이썬 클래스 예제] 기 포스팅 한 [파이썬 클래스 연습 - 이즈리얼, 리신, 몬스터 예시로 알아보기]에 이어 패스트캠퍼스의 연습 문제(게임 아이템의 종류를 구분 문제)를 포스팅함
파이썬 클래스 연습 문제
# RPG 게임의 구성안
- 아이템 공통 : 이름, 가격, 무게, 판매하기, 버리기
- 장비 아이템 : 착용효과, 착용하기
- 소모품 아이템 : 사용효과, 사용하기
- 단, 버리기는 버릴 수 있는 아이템만 가능
클래스 다이어그램 설계도
- 이름, 가격, 무게, 버리기 여부 등의 속성과 판매하기, 버리기 메서드를 가진 Item 클래스를 만들고,
- 이를 상속하여 입는 아이템 클래스(WearableItem)과 사용하는 아이템 클래스(UsableItem)를 만든다.
[파이썬 소스 코드]
class Item:
def __init__(self, name, price, weight, isdropable):
self.name = name
self.price = price
self.weight = weight
self.isdropable = isdropable
def sale(self):
print(f'[{self.name}] 판매 가겨은 [{self.price}]')
def discard(self):
if self.isdropable:
print(f'[{self.name}] 아이템을 버렸습니다.')
else:
print(f'[{self.name}] 아이템을 버릴 수 없습니다.')
class WearableItem(Item):
# 착용 효과
def __init__(self, name, price, weight, isdropable, effect):
super().__init__(name, price, weight, isdropable)
self.effect = effect
def wear(self):
print(f'[{self.name}] 착용했습니다. {self.effect}')
class UsableItem(Item):
# 사용 효과
def __init__(self, name, price, weight, isdropable, effect):
super().__init__(name, price, weight, isdropable)
self.effect = effect
def use(self):
print(f'[{self.name}] 사용했습니다. {self.effect}')
## 인스턴스 생성
sword = WearableItem('이가닌의 검', 30000, 3.5, True, '체력 5000 증가, 마력 3000 증가')
sword.wear()
sword.sale()
sword.discard()
potion = UsableItem('신비한 투명물약', 150000, 0.1, False, '투명효과 300초 지속')
potion.discard()
potion.sale()
potion.use()
- 부모 클래스 상속으로 인해 자식 클래스에서는 부모의 속성과 메서드를 그대로 사용할 수 있고, 추가적으로 각각의 메서드(wear, use)를 가지고 있다.
- 자식 클래스에서 효과 관련 속성을 추가하기 위해 생성자 오버라이딩(부모 클래스 생성자 접근)을 했다.
[실행 결과]
[이가닌의 검] 착용했습니다. 체력 5000 증가, 마력 3000 증가
[이가닌의 검] 판매 가겨은 [30000]
[이가닌의 검] 아이템을 버렸습니다.
[신비한 투명물약] 아이템을 버릴 수 없습니다.
[신비한 투명물약] 판매 가겨은 [150000]
[신비한 투명물약] 사용했습니다. 투명효과 300초 지속
[관련 포스팅 더보기]
'코딩 연습' 카테고리의 다른 글
웹 브라우저 새로고침(F5) 시 데이터 전송 안 되게 하는 문제 (0) | 2022.06.16 |
---|---|
파이썬 os 모듈(os 또는 os.path)과 pathlib 모듈 비교 (0) | 2022.06.06 |
파이썬 클래스 연습 - 이즈리얼, 리신, 몬스터 예시로 알아보기 (0) | 2022.06.04 |
엑셀 파일 병합하기 - openpyxl 활용 (0) | 2022.06.01 |
python 가상 환경 오류 - 'activate' 용어가 cmdlet, 함수,... 조치 방법 (0) | 2022.05.26 |
댓글