Python OOP
파이썬 역시 다른 언어와 같이 OOP 개념이 도입되었다.
간단히 정리하면 아래와 같다.
class Player(object):
# object 상속. object는 생략가능
def __init__(self, name):
# 생성자
# self는 자신 객체를 의미
self.name = name
def __str__(self):
# str 타입으로 형변환할때 호출되는 함수.
return self.name
class SuperPlayer(Player):
# Player 상속
def __init__(self, name, hobby):
super().__init__(name) # 부모클래스의 생성자 호출
# 네임 맹글링을 이용한 프로퍼티 생성
# 일반적인 방법으로 외부에서 참조할 수 없다. private 한정자를 붙인 느낌
self.__hobby = hobby
def __str__(self):
return super().__str__() # 부모 클래스 함수 사용
@property
def hobby(self):
# __hobby 필드의 getter 함수
return self.__hobby
sp = SuperPlayer("lee", "football")
print(sp.hobby) # football
print(str(sp)) # lee
inner function을 정의할 수 있고, 클로저 개념이 도입되어서 아래와 같은 예제가 가능하다.
+ inner function과 클로저는 다른 개념으로, 클로저는 함수 자신이 선언된 문맥 안의 변수들을 참조할 수 있다는 개념이다.
def counter_factory(val):
def counter():
nonlocal val
val += 1
print(val)
return counter
c = counter_factory(1)
c() # 2
c() # 3
데코레이터
def deco(func):
def inner(*args, **kwargs):
print('*'*10)
func(*args, **kwargs)
return inner
@deco
def say(msg):
print(msg)
say('123')
# **********
# 123
파일 & 예외
- 예외 처리
try:
num = 10 / 0
except ZeroDivisionError:
print("error") # 나누기 0 예외
except Exception as e:
print(e) # 다른 예외
else:
print(num) # 예외가 발생하지 않음
finally:
print('end') # 무조건 끝에 호출되는 부분
- 예외 발생
raise Exception("i am an exception")
- 파일 읽기
f = open('file.txt', 'r')
s = f.read()
print(s)
f.close()
# with을 쓰는 방법
with open('file.txt', 'r') as f:
s = f.read()
print(s)
# 여러 줄로 읽어오기
lines = f.readlines()
# 한 줄씩 읽어오기
lines = []
while True:
line = f.readline()
if not line:
break
lines.append(line)
- 파일 쓰기
# 덮어쓰기
f = open('file.txt', 'w', encoding='utf8')
for line in lines:
f.write(line+'\n')
f.close()
# 이어쓰기
f = open('file.txt', 'a', encoding='utf8')
for line in lines:
f.write(line+'\n')
f.close()
- 디렉터리 다루기
import os
# dir 디렉터리 생성
if not os.path.exists('dir'):
os.mkdir('dir')
# 디렉터리인지 파일인지 확인
os.path.isfile('dir')
# 파일 복사 dir -> dir2
import shutil
shutil.copy('dir', 'dir2')
로그
로그는 debug < info < warning < error < critical 순으로 나뉘어 있다.
하나의 레벨을 선택하면 선택한 레벨의 상위 레벨까지 전부 출력한다.
예컨데, 아래의 예제에서 logging.INFO로 설정하였으니 '디버깅'을 제외한 나머지가 출력된다.
import logging
logger = logging.getLogger('logger')
# logging.DEBUG부터 logging.CRITICAL까지 있음.
logger.setLevel(logging.INFO)
logger.debug('디버깅')
logger.info('확인')
logger.warning('주의')
logger.error('에러')
logger.critical('치명적인 오류')
회고
오늘은 간단히 파이썬에 대해 차츰 알아가는 시간이 되었다.
피어세션을 통해 R언어에 대해서도 약간이나마 들을 수 있었고,
앞으로 나올 수학개념들에 대해 공부해야 될 것 같다.
참고
네임 멩글링: https://tibetsandfox.tistory.com/21
'프로그래밍 > 부스트캠프 AI' 카테고리의 다른 글
DKT - EDA 해보기 (1) | 2023.05.06 |
---|---|
[level1] preprocess 최적화 (캐싱) (0) | 2023.04.16 |
Day 5 - CNN, RNN (0) | 2023.03.11 |
Day 4 - AI Basic (0) | 2023.03.09 |
Day 3 - pandas (0) | 2023.03.08 |