본문 바로가기
개발노트/python study

[Python 300제] datetime 모듈, 클래스 메소드 오버라이딩, super 함수, 파일 읽고 쓰기, except Error 처리

by lovvepearl 2022. 5. 22.

1. datetime 모듈

현재시간 확인하기

import datetime as dt

now = dt.datetime.now()

현재로부터 몇시간 전 확인하기(timedelta 활용)

import datetime as dt 

now = dt.datetime.now()
delta = dt.timedelta(hours=3)

diff = now - delta

- timedelta의 옵션으로 사용할 수 있는 값은 days, hours, seconds, weeks

- months, years는 사용할 수 없음

 

현재로부터 몇달, 몇년 전 확인하기(relativedelta 활용)

- relativedelta의 옵션으로 사용할 수 있는 값은 months, years 

from dateutil.relativedelta import relativedelta
import datetime as dt 

now = dt.datetime.now()
delta = relativedelta(months=3)

diff = now - delta
 
- 날짜와 시간(datetime) --> 문자열로 변환하려면 strftime
now = datetime.now()
time = now.strftime('%H:%M:%S')
- 날짜와 시간 형식의 문자열 --> datetime으로 변환하려면 strptime을 사용
str = '2020-05-04'
time = datetime.strptime(str,'%Y-%m-%d')
- strptime 에서 p는 parse 의 약자로, 파싱한다라는 의미를 가진다.

 

2. zfill() 메소드

자리수에 맞게 zero(0)로 채워주는 메소드
num.zfill(3)
# 반드시 3자리수여야하고 값이 없다면 zero(0)으로 채워준다.

 

3. 클래스, 객체, 인스턴스의 차이

클래스 : 객체를 만들어내기 위한 설계도 혹은 틀. 연관되어있는 변수와 메소드의 집합 --> 붕어빵 레시피, 틀
객체 : 구현할 대상. 클래스대로 생성된 실체. '클래스의 인스턴스'라고 불린다. --> 붕어빵
인스턴스 : 구현된 실체. 실체화된 객체로 메모리에 할당된다. 객체에 포함된다. --> 밀가루, 팥 등등

관계를 나타낼때도 사용한다. 예) 객체간의 링크는 클래스 간의 연관관계의 인스턴스

 

4. 클래스 method overriding, super 함수

override 는 '무시하다, ~보다 더 우선시되다' 라는 의미로

간단히 말하자면, overridding된 메소드가 가장 우선시되어진다는 뜻이다.

 

메소드 오버라이딩(method overriding)이란?

부모클래스에서 상속받은 특정 메소드를 자식클래스에서 재정의하는 작업이다.

재정의 후에는 부모클래스에서 정의한 메소드의 기능을 자식클래스에서 재활용 불가하다.

class 부모:
  def 호출(self):
    print("부모호출")

class 자식(부모):
  def 호출(self):
    print("자식호출")
    
나 = 자식()
    
# '호출'이라는 메소드가 자식클래스에서 오버라이딩
# 오버라이딩된 메소드가 최우선시되고 부모클래스의 '호출'메소드는 무시된다.
# 결과 : 자식호출

super 함수란?

super 함수는 super().[메서드 이름] 과 같이 사용하며,

부모클래스 내의 메소드 중 필요한 부분만 자식클래스에서 재정의하여 사용할 수 있도록 도와준다.

super 함수를 사용하면 오버라이딩하더라도 부모클래스 메소드를 사용할 수 있다.

class 부모:
  def __init__(self):
    print("부모생성")

class 자식(부모):
  def __init__(self):
    print("자식생성")
    super().__init__()
    
나 = 자식()

# 생성자 메소드가 자식클래스에서 오버라이딩
# 재정의 후 super 함수로 부모의 생성자메소드를 호출한다.
# 결과 
# 자식생성
# 부모생성

 

5. 클래스 변수에 접근할 때, 클래스 메소드 사용

@classmethod
    def get_account_num(cls):
    	print(cls.account_count)

- 파라미터인 cls는 클래스명과 같음으로 클래스 변수에 접근 할 수 있다.

 

6. f-string 으로 금액에 ,(콤마) 표기하기

print(f'잔고:{self.credit:,}원')
- 표기하고자하는 액수 뒤에 :(콜론),(콤마)를 붙여주면 자동으로 표기된다.
 

7. 파일열고 쓰기

f = open("안녕.txt", mode="rt", encoding="utf-8")
lines = f.readlines() # 라인별로 읽어서 리스트화
f.close()
f = open("안녕.txt", mode="wt", encoding="utf-8")
f.write("입력할 내용")
# \n 붙여주지 않으면 한줄로 입력됨
f.close()

- mode : r(읽기), w(쓰기), a(덧붙이기), x(파일생성-존재하면 에러반환), t(텍스트파일), b(바이너리파일)

- 모드의 디폴트 값은 텍스트파일

f = open("안녕.csv", mode="wt", encoding="cp949", newline='')
writer = csv.writer(f)
writer.writerow(["1", "2", "3"])
f.close()

- csv 파일은 행단위로 입력할 수 있다.

- csv 파일은 write 할때 기본적으로 한 행을 건너뛰는데 newline='' 을 설정하면

  건너뛰기 없이 입력할 수 있음

- 파일 다루기에 대한 자세한 내용 참고 사이트

https://reakwon.tistory.com/174

 

[파이썬] 파일 다루기 - 파일 열기(open), 읽기(read), 쓰기(write), 삭제(remove)

파이썬 파일 다루기(File Handling) 모든 언어에서 파일을 다루는 것은 매우 중요한 일이고 필수적으로 알아두어야합니다. 프로그래밍에서 파일을 읽고 분석하는 작업, 그리고 결과를 기록하여 보

reakwon.tistory.com

 

8. 예외 발생 시 에러 메시지를 변수로 바인딩하는 법

data = [1, 2, 3]


for i in range(5):
    try:
        print(data[i])
    except IndexError as e:
        print(e)

- IndexError 를 e로 사용하기로 정하고 예외처리를 하게되면

- 'list out of index' 라는 에러메세지가 print 된다.

 

파이썬 예외처리의 구조

try:
    실행 코드
except:
    예외가 발생했을 때 수행할 코드
else:
    예외가 발생하지 않았을 때 수행할 코드
finally:
    예외 발생 여부와 상관없이 항상 수행할 코드

 

여기까지 python 300제 문제풀이가 모두 끝났다.

 

Next)

Python의 클래스와 객체지향에 대해 깊게 들어가보고자 한다.