| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- github
- 프로그래머스
- Class
- 1주차
- 파이썬
- 장고
- 알고리즘
- 마스킹
- WebSocket
- Git
- sql
- 채팅
- WIL
- 미니프로젝트
- re-id
- js
- WHERE절
- 개발일지
- 프로젝트
- resnet50
- channels
- 2주차
- 백준
- Commpot
- 가상환경
- 정보처리기사
- REDIS
- 정보처리기사실기
- poetry
- vscode
- Today
- Total
개발일기
#8 파이썬 연습 (클래스를 활용하여 게임 만들기) 본문
오늘의 튜터님 말씀
클래스라는 것은 과자틀을 만드는 것이고 과자틀을 사용해서 찍어낸 쿠키가 인스턴스다..!
객체와 인스턴스는 동일한 말이다~
1. __init__ 함수
class에 __init__메소드를 사용할 경우 인스턴스 생성 시 해당 메소드가 실행된다.
클래스에 init함수는 클래스의 인스턴스를 생성하는 과정에서 무조건 실행되는 함수이다.
class CookieFrame():
def __init__(self, name):
print(f"생성 된 과자의 이름은 {name} 입니다!")
self.name = name
# name은 init함수에서 인자로 받고 있고, self.name = name이라고 name이라는 변수를 저장하고 있으므로
# 나중에 name을 확인하고 싶으면 print(cookie.name)하면 된다.
# 근데 init 함수에서 name이라는 인자를 받고 있지만, 입력된 인자가 없으면 에러 발생!
# 인자가 입력되지 않은 경우, 입력된 경우 모두 코드를 실행시키고 싶으면 기본값을 지정해주면 된다.
# name = "default"
# init함수뿐 아니라 함수에서도 똑같이 활용 가능하다.
2. class 상속 :
클래스를 생성할 때 다른 클래스에 선언된 변수, 메소드 등의 기능들을 가져와 사용할 수 있도록 해주는 기능
동일한 코드를 여러 클래스에서 조금씩 수정해 사용하거나 모듈에 내장되어 있는 클래스를 변경할 때 주로 사용된다.
- super()를 사용하면 부모 클래스의 코드를 그대로 사용할 수 있다.
- 상속이 되면 부모 클래스의 매소드를 상속받아서 쓸 수 있다.
- 상속 받은 클래스의 특정 코드를 변경해 사용할 때, 오버라이딩 활용하기!
- 똑같은 이름의 매서드를 선언하면 부모클래스의 매서드가 아닌 자식클래스에 새로 선언된 매서드를 사용하게 된다.
- module의 코드를 변경하는 행위는 가능하면 하지 않는 것이 좋다.
- 내 맘대로 수정했다가 원래 되던게 안될 수도 있고, 나중에 버전이 업데이트된 걸 설치했을 때 문제가 생길 수 있다.
- 상속을 사용해서 오버라이딩을 활용하기!
- class 객체 공부는 구현부코드를 보고 하기!! 꼭 :)
3. 활용하기 :)
class 상속을 연습할 겸 게임을 한 번 만들어보았어요!
https://github.com/jisukim908/pythonpractice.git
GitHub - jisukim908/pythonpractice: Using python, make some interesting practices!
Using python, make some interesting practices! Contribute to jisukim908/pythonpractice development by creating an account on GitHub.
github.com
구경하실 분은, game폴더 속 Mostergame.py를 살펴보시면 됩니다! (즐겜하세요..^^)
몇 가지 코드를 보면서, 느낀 점과 배운 점을 적어보도록 하겠습니다!
먼저, 부모 클래스..!
class Monster():
def __init__(self,hp):
self.hp=hp
def attack(self,damage):
self.hp -= damage
def healing(self,plus):
self.hp += plus
print(f'치유스킬 발동. 남은 hp : {self.hp}')
def status_check(self):
if self.hp > 0:
print(f'마왕이 반격을 했다. 당신의 몬스터는 살았습니다. 남은 hp : {self.hp}')
else:
print(f'마왕이 반격을 했다. 당신의 몬스터는 죽었습니다.')
Monster라는 큰 부모클래스를 만들고, 자식 클래스로 EvilMoster, FireMonster, WaterMonster를 만들었어요.
오버라이딩과 super()을 활용하여 Evil, Fire, Water 몬스터들의 클래스 속성을 변경했습니다.
마왕과 우리 편 몬스터 둘 중 하나만 살 때까지 싸웠으면 좋겠어서 while문을 활용하여 코드를 짰습니다.
결과값이 한 번에 나오는 게 아니라 약간의 텀을 두고 나왔으면 좋겠어서 time.sleep을 이용했습니다.
print("용사여 환영합니다. 당신은 마왕을 무찔러야 합니다. 당신의 몬스터를 고르세요.")
time.sleep(2)
print("물몬스터(w)는 공격데미지가 상대적으로 높습니다. 불몬스터(f)는 치유력 회복이 느립니다.")
time.sleep(2)
choice = input("당신의 선택은? w 또는 f 중 하나를 써주세요.").strip()
print("당신의 몬스터가 공격을 시작합니다.")
time.sleep(2)
공격데미지나 치유스킬은 랜덤하게 줄 수 있게 random.randiant를 활용했고,
몬스터의 성질에 따라 범위가 다르게 조절했습니다.
#예시이고 실제 코드와 무관
evil.attack(damage=int(random.randint(1, 40)));
water.attack(damage=int(random.randint(10, 40)));
water.healing(plus=random.randint(1, 20));
마지막으로 if-break구문을 활용해서 hp가 0 이하가 되면 멈추게 했습니다.
솔직히.. 완벽한 확률게임입니다 ^^
저도 몇 번 해봤는데.. 어쩔 땐 이기고, 어쩔 땐 지더라군요 ㅋㅋ
여러분의 운을 확인해보세요 :)
지금까지 for문이나 if문은 많이 사용을 해봤지만, while 구문은 활용해보지 못했는데 이번에 while문을 사용해볼 수 있어서 좋았고, class, class 상속을 충분히 연습할 수 있어서 좋았습니다 :)
수업듣는걸로 끝내지 말고, 직접 활용해보는 게 중요하다는 튜터님의 말씀을 따라서
요즘 개념공부한 걸 적더라도 직접 만들어보고 활용한 것도 같이 적고 있습니다~
(시간은 더.. 오래 걸리지만 ;; 확실히 이해도 잘 되고.. 생각한 걸 구현해보니 재미도 있습니다 ㅎㅎ)
이렇게 해나가다보면.. 실력이 늘겠죠?ㅜㅜ 제발..
더 열심히 하는 방법뿐이겠죠 ㅎㅎ 열심히 하겠습니다!!
'오늘의 공부일기 > 파이썬 공부일기' 카테고리의 다른 글
| #9 파이썬 연습 (데코레이터) (0) | 2023.03.24 |
|---|---|
| #8 파이썬 심화 (정규표현식, 파일과 디렉토리, csv파일 다루기) (0) | 2023.03.24 |
| #7 파이썬 연습 (모듈 및 패턴) (0) | 2023.03.23 |
| #6 파이썬 심화 (가상환경, 코드 컨벤션, 변수 유효 범위) (0) | 2023.03.23 |
| #5 파이썬 연습 (map, filter, lamda, class) (0) | 2023.03.21 |