날짜와 시간

● 날짜와 시간은 파이썬에서 기본으로 제공하는 자료형에는 포함되어 있지 않지만 중요한 자료형

● 날짜와 시간은 각각 date 객체, time 객체를 이용하며 이들 객체는 datetime 모듈에 포함되어 있다.

     - import datetime 을 이용, 해당 모듈을 불러올 수 있다.

     - 주요 클래스

       - datetime : 날짜와 시간을 모두 포함하는 클래스

       - date : 날짜 관련 클래스

       - time : 시간 관련 클래스

 

: 날짜와 시간의 획득

● datetime 모듈 내 datetime 클래스의 now() 메서드를 이용하면 현재 날짜와 시간을 획득할 수 있다.

● datetime 클래스 생성자로 직접 날짜를 지정할 수 있다.

 - 년, 월, 일, 시, 분, 초 마이크로초 순으로 매개변수를 전달하면 되며, 최소 년월일은 지정해 주어야 한다.

 

: datetime 클래스

● datetime 클래스의 주요 속성

속성 설명
year
month
day
hour
minute
second
microsecond 마이크로초

 

● datetime 클래스의 주요 메서드

메서드 설명
weekday() 요일을 반환
strftime() datetime 을 문자형으로 포맷
date() 날짜 정보만 가지는 date 클래스로 변환
time() 시간 정보만 가지는 time 클래스로 변환

- date는 datetime 클래스의 날짜 관련 속성과 요일 메서드를 이용 가능

- time은 datetime 클래스의 시간 관련 속성 이용 가능

 

: datetime의 비교와 두 datetime의 차이 구하기

● 두개의 날짜는 대소 비교, 차이 값을 구할 수 있다.

● 두 날짜의 차이는 datetime.timedelta 클래스로 반환, 날짜의 차이를 구할 수 있다.

 

: timedelta

● timedelta 클래스의 주요 속성

- days : 일수

- seconds : 초 (0 ~ 863999)

- microseconds : 마이크로초 ( 0 ~ 999999 )

 

● timedelta 클래스의 메서드

 - total_seconds() : 모든 속성을 초단위로 모아서 변환

 

● 두 datetime의 차이가 timedelta로 반환되었던 것과 반대로 datetime 클래스에 timedelta 값을 더해 새로운 날짜를 만들 수도 있다.

 

 

: datetime을 문자열로 반환

 

● datetime의 strftime 메서드를 이용하면 datetime 형식을 문자열로 변환할 수 있다.

● strftime의 출력 형식 기호

기호 표시되는 형식
%Y 서기 년도 4자리 표시
%y 서기 년도 2자리 표시
%m 당을 두 자리로 표시
%d 일을 두 자리로 표시
%B 영어로 달을 표시
%b 영어로 달을 단축 표시
%A 영어로 요일을 표시
%a 영어로 요일을 단축 표시
기호 표시되는 형식
%H 시간 표시(24시간)
%I 시간 표시(12시간)
%p AM/PM 표시
%M 분을 두 자리로 표시
%S 초를 두 자리로 표시
%f 마이크로초를 6진수로

 

 

: 문자열을 datetime으로 변환

datetime 클래스의 strptime 메서드를 이용하면 문자열로부터 날짜와 시간 정보를 읽어서 datetime 클래스로 변환할 수 있다.

strptime의 인수

 - 첫 번째 인수 : 날짜와 시간 정보를 가진 문자열

 - 두 번째 인수 : 문자열 해독을 위한 형식 문자열

 

 

파이썬 모듈

 

  • 함수나 변수 등을 정의해 놓은 파이썬 프로그램 파일
  • 모듈 내에서는 어떤 코드도 작성 가능하다 ( 변수, 함수, 클래스 등)
  • 다른 모듈에 의해 호출되고 사용된다

모듈의 종류

- 표준 모듈

- 사용자 생성 모듈

- 서드 파티 모듈

 

: 네임스페이스

  • 네임스페이스는 모듈 내부의 이름(변수, 함수, 클래스)를 구분하는 역할 수행
  • 네임스페이스가 주어지지 않은 변수나 함수는 LEGB 규칙에 따라 찾게 된다.

 

: from ~ import

from {모듈명} import {모듈객체} # 모듈명 없이 객체명만으로 접근

from math import pi, sin, con, tan

print(sin(pi/6), cos(pi/3), tan(pi/4))

 

- 현재 모듈에 특정 이름이 중복되는 경우 맨 마지막에 import된 객체가 적용

- 모듈 내에 정의된 모든 이름을 현재 모듈로 가져온다(*)

from math import * # math 모듈 내 모든 이름 가져오기

- 모듈 이름을 다른 이름으로 바꾸는 것도 가능

from math import *

import mymod as m # mymod의 이름을 m으로 변경

- 모듈 내에 정의된 객체의 이름을 변경하는 것도 가능

 

: dir 함수

dir 함수 인자에 객체를 넣어주면 해당 객체가 어떤 변수와 메서드를 갖고있는지 반환해준다.

 

: __name__ 과 "__main__"

  • 모든 모듈은 모듈의 이름을 저장하고 있는 내장 변수 __name__을 갖고 있다
  • 최상위 모듈(인터프리터에서 실행되는 모듈)의 __name__ "__main__" 이다
  • 그 외 import 되는 모듈의 이름은 파일명이다.

내장 변수 __name__ 과 최상위 실행 모듈의 이름이 "__main__" 인 점을 응용하면

- import 되는 모듈로 사용하면서

- 자신이 최상위 모듈로 실행될 때만 특정 기능을 수행하는 코드를 만들 수 있다.

# mymod.py

def main():

  print("mymod.py를 최상위 모듈로 실행했습니다.")

if __name__ == "__main__":

  main()

else:

  print("mymod.py의 모듈이름:" + __name__)

 

: 모듈의 공유

 

: import한 module 이름의 열거

한번이라도 import한 모듈은 dict 타입인 sys.modules 변수에 저장된다.

 

: 이름(변수, 함수, 클래스) 이 속한 모듈 알아내기

파이썬 변수, 함수, 클래스는 각각 자신이 정의된 모듈의 이름이 저장된 __module__ 속성을 가지고 있다

 

 

패키지

  • 모듈을 모아놓은 단위
  • 관련된 여러 개의 모듈을 계층적인 디렉터리로 분류해서 저장하고 관리한다
  • 닷(.)을 이용하여 관리할 수 있다.
  • 아래 그림에서 Game, Sound, Image, Level은 디렉터리이고, .py 파일이 파이썬 모듈
  • __init__.py는 패키지를 인식시켜주는 역할을 수행 -> 특정 디렉터리가 패키지로 인식되기 위해 필요한 파일

 

 

 

파이썬 클래스

  • 새로운 이름 공간을 지원하는 단위 : 데이터의 설계도
  • 데이터와 데이터를 변경하는 함수(메서드)를 같은 공간 내에 자성
  • 클래스를 정의하는 것은 새로운 자료형을 정의하는 것이고, 인스턴스는 이 자료형의 객체를 생성하는 것이다
  • 클래스와 인스턴스는 각자의 이름공간을 가지게 되며 유기적인 관계로 연결

 

 

: 용어 정리

용어 설명
클래스(Class) class 문으로 정의하며, 멤버와 메서드를 가지는 객체
클래스 객체 어떤 클래스를 구체적으로 가리킬 때 사용
인스턴스 클래스를 호출하여 만들어지는 객체
인스턴스 객체 인스턴스화 된 객체
멤버 클래스가 갖는 변수
메서드 클래스 내에 정의된 함수
속성 멤버+메서드
상위클래스 기반 클래스. 어떤 클래스의 상위에 있으며 여러 속성을 상속해준다.
하위 클래스 파생 클래스. 상위 클래스로부터 여러 속성을 상속 받는다

 

 

: 클래스 이용의 장점

  • 프로그램의 규모가 커졌을 때 의미 있는 집합체 단위로 프로그램을 정리할 수 있다.
  • 설계도(Class)가 있으므로 인스턴스를 양산할 수 있다.

 

: 클래스의 생성과 메서드의 정의

1
2
3
4
5
6
7
8
9
10
class Point:
    def set_x(self, x):
        self.x = x
    def get_x(self):
        return self.x
    def set_y(self, y):
        self.y = y
    def get_y(self):
        return self.y
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

인스턴스 메서드의 첫 번째 인자는 항상 self

 

: 인스턴스 객체 생성과 메서드 호출

Bound Instance Method 호출

1
2
3
4
5
6
7
8
9
10
11
12
13
from point import Point
 
def main():
    bound_class_method()
 
def bound_class_method():
    p = Point() # Point 인스턴스 객체 생성
    p.set_x(10)
    p.set_y(10)
    print(p.get_x(),p.get_y(), sep = ',')
    
if __name__ == "__main__":
    main()
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

 

 

Unbound Instance Method 호출(참고)

1
2
3
4
5
6
7
8
9
10
11
12
from point import Point
 
def main():
    unbound_class_method()
 
def unbound_class_method():
    p = Point()
    Point.set_x(p, 10# 객체를 첫 번째 인자에 할당하고 있음에 유의
    Point.set_y(p, 10)
    print((Point.get_x(p), Point.get_y(p), sep = ','))
if __name__ == "__main__":
    main()
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

 

 

 

: 정적 메서드 (static method)와 클래스 메서드 (class method)

  • 인스턴스 객체의 멤버에 접근할 필요가 없는 메서드
  • 첫 번째 인자로 인스턴스 객체 참조값을 받지 않는 클래스 내에 정의된 메서드
  • Class 메서드의 첫 번째 인자는 클래스 객체 참조를 위한 객체 참조값
  • @staticmethod, @classmethod 데코레이터로 손쉽게 구현 가능

 

: 클래스 멤버와 인스턴스 멤버

종류 이름 공간 공유 범위
클래스 멤버 클래스 이름 공간 내 모든 인스턴스 객체들에 공유
인스턴스 멤버 인스턴스 이름 공간 내 개별 인스턴스 객체에서만 참조

 

: 클래스 멤버와 인스턴스 멤버 접근

인스턴스 객체에서 참조하는 멤버의 객체를 찾는 순서는 아래와 같다

- 인스턴스 멤버

- 인스턴스 멤버가 없다면 클래스 멤버를 찾음

 

: 생성자와 소멸자

생성자 : 클래스가 인스턴스화 될 때 실행되는 내용. 초기화.

__init__ 메서드 내에 작성

소멸자 : 클래스 인스턴스가 제거될 때 실행되는 내용

__del__ 메서드 내에 작성

 

+ Recent posts