python
Python - 기초개념2
Strong_H
2021. 11. 18. 22:52
# class 클래스
class 정의시 class 클래스명:
class name:
__init__은 클래스 최초 생성시 가장 먼저 실행한다.
<pre style="font-family: 굴림체; font-size: 9pt;">class name:
def __init__(self):
self.hp = 150
self.mp = 100</pre>
init에서는 속성값에 대한 초기화, 특정 메서드 실행 등의 행위가 들어간다.
self는 클래스를 호출한 변수명이 반복적으로 들어간다.
char1 = name()
char1이라는 변수명으로 클래스를 만들어주었고,
print(char1.hp)
char1.hp 로 클래스의 메소드(함수)를 사용해서 150이라는 값을 불러와서 print함
출력
150
클래스 생성시 값을 넘겨줄 수 있다.(매개변수)
<pre style="font-family: 굴림체; font-size: 9pt;">class name:
def __init__(self, item): #입력받은 매개변수가 있을때, self에 입력되는것이 아닌 self값은 항상 고정
self.hp = 150
self.mp = 100
char1 = name('item') # char1 클래스를 생성하고, item이라는 매개변수를 입력함
print(char1.hp)</pre>
self값은 항상 변수명인 char1로 고정되어 있는게 특징.
입력받은 매개변수값은 self 뒷자리부터 차례로 받게됨.
# 상속
상속 : 클래스의 공통적인 기능을 한번 만들어두고, 호출하여 사용할수 있다.
class prot:
def __init__(self):
self.m = 0
self.g = 0
def getM(self):
self.m = self.m + 5
def getG(self):
self.g = self.g + 4
class zerg:
def __init__(self):
self.m = 0
self.g = 0
def getM(self):
self.g = self.g + 4
def getG(self):
self.g = self.g + 3
프로토스와 저그의 기본 미네랄, 가스량을 주고자 할때 모든 종족을 이렇게 다 클래스 할 필요가 없다.
상속
상속을 받을때는 class 클래스명(상속받을 클래스명):
상속을 사용하면
class common:
def __init__(self):
self.m = 0
self.g = 0
def getM(self):
self.m = self.m + 4 # 기본 미네랄 파밍량은 4
def getG(self):
self.g = self.g + 3 # 기본 가스 파밍량은 3
class prot(common):
def getM(self):
self.m = self.m + 5 # 프로토스 종족의 미네랄 파밍량은 5으로 오버라이딩 해줌(재정의)
def getG(self):
self.g = self.g + 4 # 프로토스 종족의 가스 파밍량은 4 으로 오버라이딩 해주어 메소드로직으로 덮어씀
def makeProve(self):
if self.m < 4 or self.g < 2: # 미네랄이나 가스가 자원이 부족하면 프린트
print ("자원이 부족합니다")
else :
self.m = self.m - 3 # 자원이 부족하지 않다면 미네랄 3소비
self.g = self.g - 1 # 가스 1소비
print("프로브가 생성되었습니다.")
class zerg(common):
def makeDron(self):
if self.m < 4 or self.g < 2:
print ("자원이 부족합니다")
else :
self.m = self.m - 2
self.g = self.g - 1
print("드론이 생성되었습니다.")
player1 = prot() # player1 에 클래스 생성
player1.getM() # player1 이 getM 메소드를 실행 > 미네랄 + 5
player1.getM() # 미네랄 +5
player1.getG() # 가스 +4
player1.makeProve() # makrProve 메소드 실행, 자원이 있으므로 미네랄-3 가스-1
print(player1.g) # 파밍량 4 소모량 1 예상 출력 3
print(player1.m) # 피망량 10 소모랑 3 예상출력 7
츨력
프로브가 생성되었습니다
3
7
class common:
으로 기본 설정값을 고정해둔뒤,
별도 클래스 생성시 만들어둔 클래스의 내용을 불러와 사용이 가능함.
프로토스는 저그와 다르게 파밍량을 1씩 증가 시켜 주고싶을때,
클래스 내에서 재정의 해주면 저장이 됨
이를 오버라이딩 이라고함
오버라이딩 - 상속받은 메소드를 새로운 메소드 로직으로 덮어쓴다 ( 함수 내에서 재정의 함으로써)
# try except 문
예외를 처리하기 위한 것
try:
number = int(input())
except: # 모든 에러에 대해서 출력 해주고 싶을때
print("숫자만 입력하세요")
except ValueError: # 특정 에러에 대해서 출력 해주고 싶을때 (실제로 많이사용)
print("밸류에러가 발생")
특정 에러에 대해서 출력해주고 싶을때
except 에러이름:
# break and continue
break 는 아예 탈출
continue 는 처음위치로 돌아가 실행
a = 0
while a < 10 :
a = a + 1
if a % 2 == 0:
break # 조건이 되면 while 문을 아예 탈출함
print(a)
while a < 10 :
a = a + 1
if a % 2 == 0:
continue # 1을 아래로 넘겨주고 다시 처음으로로 print(a)
출력
1 3 5 7 9
# 모듈
모듈은 함수 or 클래스의 모음
import 모듈명
모듈명의 .py값은 같은 경로일땐 안써도 무방하다.
사용시 모듈명.함수명()
calc.py (Python File)
def add(a,b):
return a+b
def sub(a,b):
return a-b
add함수와 sub함수가 있는 calc 라는 이름의 파이썬 파일
<pre style="font-family: 굴림체; font-size: 9pt;">import calc # calc모듈을 불러온다
result = calc.add(2,4) # result에 calc모듈의 add함수의 결과값을 대입하겠다.
print(result)</pre>
다른 파일에서 import calc 로 add와 sub함수를 사용할수 있다.
from 모듈명 import 사용할함수1, 사용할함수2 ....
<pre style="font-family: 굴림체; font-size: 9pt;">from calc import add, sub # calc모듈에서 add, sub 함수를 가져다 쓰겠다
result = sub(1,3) # result에 sub함수를 대입 calc.sub로 쓰지 않아도 됨.
print(result)</pre>
# pip ( Python Install Package )
파이썬 모듈 집합소 (패키지 저장소)
다른사람이 만들어놓은 함수를 사용하고 싶을때,
pip install 패키지명
파이썬 설치시 pip명령어는 기본적으로 제공
Terminal 에서
C:\Users\kim\PycharmProjects\week1>pip install requests
requests모듈에 있는 함수를 쓰기위해 pip이용 설치
# 회고
클래스는 기본 디폴트값을 지정해주는것 이라고 생각하면 이해가 편했다.
각각 클래스 별로 공통된 내용과 다른내용에 대해서, 공통된 내용을 미리 써놓고,
클래스 정의시 불러와서 상속시키면 공통된내용을 사용할수 있고,
공통된 내용중에 특정부분에 대한 값을 바꾸고 싶다면 재정의하여 오버라이딩 하면 된다.
메소드 사용시 변수명.메소드명으로 접근하도록 하는것을 기억하자.
예외처리는 간단한편이라 이해가 어렵지 않았다.
에러처리에 대해 사용하는것을 예를들어보니 이해가 쉬웠다.
break과 continue는 비슷한듯 하지만 이동하는 위치가 다르다는점만 잘 기억하면 될거같다.