날짜와 시간
● 날짜와 시간은 파이썬에서 기본으로 제공하는 자료형에는 포함되어 있지 않지만 중요한 자료형
● 날짜와 시간은 각각 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
|
# point.py
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__ 메서드 내에 작성
'딥러닝 기반 영상인식 개발 전문가 과정 > C언어, Python, 자료구조' 카테고리의 다른 글
7월23일 파이썬 str메서드, 오버로딩, jupyter, Pandas (0) | 2019.07.23 |
---|---|
7월22일 파이썬 코드 (0) | 2019.07.22 |
7월22일 파이썬 예외처리, 파일, Using Pickle (0) | 2019.07.22 |
7월19일 파이썬 예제 코드 (0) | 2019.07.19 |
7월 19일 파이썬 순차 자료형(Sequence) 내장 함수, 객체, 함수 (0) | 2019.07.19 |