▧ 라이브러리 사용을 위한 클래스 / 모듈 / 패키지 이해

'클래스'와 '객체'는 처음 접했을 때, 이해하기 어렵다. 일단 글을 읽고 사용해보며 이해하기위해 노력해보자.

 

'쿠키틀'과 '쿠키'로 예를 들어보자면,

- 쿠키틀 : 클래스(class) (객체를 생성하기 위한 설계도 또는 틀)

- 쿠키틀로 만든 쿠키 : 객체(object)

 

=> 객체의 '속성'은 객체 안의 '변수'에 저장된다.
=> 객체의 이름 다음에 점을 찍고 변수 이름을 적는다.
cf) car.brand = "현대자동차"

 

=> 객체의 '메소드'는 객체안에 정의된 '함수'이다.
=> 객체의 '메소드'는 객체 이름 다음에 점을 찍어 호출한다.
cf) car.turn_on()

 

■ 클래스 / 객체 만들기

class 클래스명:

    # 생성자 : 객체를 생성할 때 반드시 호출이 되고 제일 먼저 실행되는 일종의 메서드라고 생각하자
    def __init__(self, 매개변수1, 매개변수2, ... ): 
        속성 초기화

    def 메소드1(self, 매개변수1, 매개변수2, ... ):
        메소드1 내용

    def 메소드2(self, 매개변수1 매개변수2, ... ):
        메소드2 내용
cf) self : 메소드를 호출한 객체를 받는다.

 

 

EX) 자동차 클래스와 객체

# 3가지 속성과 3가지 기능이 있는 자동차 객체를 찍어내기 위한 틀을 만든다.
# 속성 : brand, model, color
# 기능 : turn_on, turn_off, drive

# 클래스 만들기
class Car:   # 클래스는 보통 대문자로 시작하는 경우가 많다.
    def __init__(self, b, m, c):
        self.brand = b  # 이 객체의 브랜드는 b라는 매개변수에서 받아온다.
        self.model = m
        self.color = c
        print(self.brand, self.model, self.color,'출고')
        
    def turn_on(self):
        print(self.brand,'시동을 겁니다.')
        
    def turn_off(self):
        print(self.brand,'시동을 끕니다.')
        
    def drive(self):
        print(self.brand,'주행중입니다.')
# 객체 생성하기
car1 = Car('현대자동차','쏘나타','화이트') # -> init 생성자에 매개변수를 전달

# self는 객체를 받는 매개변수라고 생각하면 된다.
car2 = Car('르노삼성','sm7','블랙')

현대자동차 쏘나타 화이트 출고
르노삼성 sm7 블랙 출고

 

car1.turn_on() # car1이라는 객체가 Car클래스 안의 함수 turn_on(self) self에 적용됨 
car2.turn_off()

현대자동차 시동을 겁니다.
르노삼성 시동을 끕니다.

 

 

■ 객체의 메소드 목록 조회

dir(list)   # list객체의 메소드 목록 조회하기 / directory

['__add__',
 '__class__',
 '__class_getitem__',
 '__contains__',
 '__delattr__',
 '__delitem__',
 '__dir__',
 '__doc__',
 '__eq__',
 '__format__',
 '__ge__',
 '__getattribute__',
 '__getitem__',
 '__gt__',
 '__hash__',
 '__iadd__',
 '__imul__',
 '__init__',
 '__init_subclass__',
 '__iter__',
 '__le__',
 '__len__',
 '__lt__',
 '__mul__',
 '__ne__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__reversed__',
 '__rmul__',
 '__setattr__',
 '__setitem__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 'append',
 'clear',
 'copy',
 'count',
 'extend',
 'index',
 'insert',
 'pop',
 'remove',
 'reverse',
 'sort']

 

 

■ 함수, 메소드 사용법

a = [1,2,3]

help(a.append)   # help() 함수를 사용하여 리스트.append 메소드의 사용법을 출력한다.

Help on built-in function append:

append(object, /) method of builtins.list instance
    Append object to the end of the list.

 

help(print)   # print의 사용법 출력하기

Help on built-in function print in module builtins:

print(...)
    print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
    
    Prints the values to a stream, or to sys.stdout by default.
    Optional keyword arguments:
    file:  a file-like object (stream); defaults to the current sys.stdout.
    sep:   string inserted between values, default a space.
    end:   string appended after the last value, default a newline.
    flush: whether to forcibly flush the stream.

 


■ 모듈

=> 프로그램에서 공통적으로 사용되는 변수, 수, 클래스들을 별도로 모아서 사용
=> 데이터, 함수, 클래스 등을 모아서 하나의 파일로 저장해놓은 것

  • 내장모듈 : 파이썬에서 제공하는 기본 모듈   cf) random, time등
  • 사용자정의 모듈 : 사용자가 만든 모듈
  • 외장모듈 : 다른 기업이나 단체에서 제공하는 모듈   cf) pip명령어로 설치

 

☞ import하여 사용한다

import 모듈명   -> 모듈 import
모듈명.함수명()   -> 모듈의 함수 사용
모듈명.변수명   -> 모듈의 변수 사용
모듈명.클래스명()   -> 모듈의 클래스 사용

 모듈의 별칭 지정하여 사용하기
import 모듈명 as 별칭
별칭.함수명()
별칭.변수명
별칭.클래스명()

☞ 모듈의 일부만 가져오기
from 모듈명 import 함수명1,변수명1,클래스명1   -> 함수명1,변수명1,클래스명1만 import
함수명1()   -> 모듈명을 붙이지 않고 바로 사용가능하다
변수명1
클래스명1()

☞ 모듈의 전체 가져오기
from 모듈명 import *   -> 모듈의 전체 가져오기
함수명1()   -> 모듈 내 모든 함수,변수,클래스를 모듈명 붙이지않고 사용가능 
변수명1
클래스명1()

 

■ 패키지

=> 여러 모듈을묶어놓은 것 (폴더)
=> 도트(.)를 사용하여 파이썬 모듈을 계층적으로 표현

import 사용
import 패키지명.디렉토리명.모듈명 패키지명.디렉토리명.모듈명.함수명()
from 패키지명.디렉토리명 import 모듈명 모듈명.함수명()
from 패키지명.디렉토리명.모듈명 import 함수명 함수명()

☞ 패키지 사용하기
패키지 설치 -> pip install 패키지명
패키지 제거 -> pip uninstall 패키지명
설치된 패키지 목록 확인 -> pip list

 

 

※ 사용자정의 모듈 만들기

myCalc 파이썬 파일을 같은 경로에 만든다.

 

# myCalc
def get_plus(a,b):
    return a+b

def get_minus(a,b):
    return a-b

def get_multiply(a,b):
    return a*b

def get_division(a,b):
    if b != 0:
        return a/b
    else:
        return 'zero division error'

 

 

■ 모듈 사용하기

import myCalc   # 파일이 같은 경로내에 있을 때

print(myCalc.get_plus(1,2))
print(myCalc.get_minus(1,2))
print(myCalc.get_multiply(1,2))
print(myCalc.get_division(1,2))

3
-1
2
0.5

 

 

■ 별칭으로 사용하기

import myCalc as test

print(test.get_plus(1,2))
print(test.get_minus(1,2))
print(test.get_multiply(1,2))
print(test.get_division(1,2))

3
-1
2
0.5

 

 

■ 모듈의 이름을 붙이지 않고 사용하기

from myCalc import get_plus, get_minus  # import한 함수만 사용가능하다

print(get_plus(1,2))
print(get_minus(2,4))
print(myCalc.get_multiply(3,4))

3
-2
12

 

from myCalc import *

print(get_plus(1,2))
print(get_minus(1,2))
print(get_multiply(1,2))
print(get_division(1,2))

3
-1
2
0.5

 


■ 파이썬 내장 모듈

math : 수학적 연산과 관련된 함수들을 모아놓은 모듈

  • ceil : 올림하여 정수로 만들기
  • floor : 내림하여 정수로 만들기
  • sqrt : 제곱근
  • factorial : 팩토리얼
  • pi : 원주율
import math

print(math.ceil(1.4))
print(math.floor(1.4))
print(math.sqrt(4))
print(math.factorial(3))
print(math.pi)

2
1
2.0
6
3.141592653589793

 

 

▶ random : 임의의 수를 발생시키거나 리스트의 요소 중 임의의 수를 선택하는데 사용되는 모듈

 

※ 랜덤 정수 구하기

  • random.randint(시작값,끝값) : 시작값~끝값 사이의랜덤 정수 구하기(끝값 포함)
  • random.randrange(시작값,끝값) : 시작값~끝값 사이의 랜덤 정수 구하기(끝값 미포함)
  • random.randrange(끝값) : 0~끝값 사이의 랜덤 정수구하기(끝값 미포함)
import random
# 1~10 사이의 랜덤 정수 구하기
print(random.randint(1,10))
print(random.randrange(1,11))

# 0~10 사이의 랜덤 정수 구하기
print(random.randrange(11))

9
1
5

 

 

※ 랜덤 실수 구하기

  • random.random() : 0~1 사이의 랜덤 실수 구하기
  • random.uniform(시작값,끝값) : 시작값~끝값 사이의 랜덤 실수 반환(끝값 미포함)
import random
# 0~1 사이의 랜덤 실수 구하기
print(random.random())

# 1~10 사이의 랜덤 실수 구하기
print(random.uniform(1,11))

0.03895176307246251
3.8759407148138183

 

 

※ 시퀀스 데이터에서 무작위 요소 추출

  • random.choice(시퀀스)
import random
print(random.choice([1,2,3,4,5]))
print(random.choice('가나다라마바사'))
print(random.choice(range(1,101)))

4

90

 

 

※ 시퀀스 데이터에서 무작위로 n개 요소 추출

  • random.sample(시퀀스,n)
import random
print(random.sample([1,2,3,4,5], 2))
print(random.sample('가나다라마바사', 3))
print(random.sample(range(1,101), 6))

[1, 3]
['마', '사', '라']
[53, 88, 10, 63, 22, 91]

 

 

※ 시퀀스 데이터를 무작위로 랜덤하게 섞기

  • random.shuffle(시퀀스) : 원본을 섞는다. 리턴값이 없다.
import random
a = [1,2,3,4,5,6,7,8]

random.shuffle(a)
print(a)

[7, 4, 8, 2, 6, 1, 3, 5]

 

 

 

datetime: 날짜, 시간과 관련된 모듈 / 날짜 형식을 만들 때 주로 사용

 

※ 현재 날짜와 시각 가져오기

  • datetime.datetime.now()
import datetime
datetime.datetime.now()

datetime.datetime(2023, 2, 24, 23, 21, 38, 274533)

 

 

※ 현재 날짜와 시각 출력

import datetime
now = datetime.datetime.now()

# year,month,day,hour,minute,second
print(now.year,'년',now.month,'월',now.day,'일', sep='')

2023년2월24일

 

 

※ 시간을 포멧에 맞게 출력하기

  • datetime.datetime.now().strftime(포멧)
import datetime
now = datetime.datetime.now()

now.strftime('%Y.%m.%d %H:%M:%S')

'2023.02.24 23:23:31'

 

 

※ 특정 시간 이후의 날짜와 시간 구하기

  • datetime.datetime.now() + datetime.timedelta(더할시간) : 특정 , 시간, , 이후의 날짜와 시간 구하기
  • timedelta에는 year로 계산하는 기능은 없음
import datetime
now = datetime.datetime.now()

now + datetime.timedelta(weeks=1,days=1,hours=1,minutes=1,seconds=1)

datetime.datetime(2023, 3, 5, 0, 24, 32, 319944)

 

import datetime
now = datetime.datetime.now()

# 현재로부터 100일 전의 날짜와 시간 구하기
now + datetime.timedelta(days=-100)

datetime.datetime(2022, 11, 16, 23, 23, 31, 319944)

 

 

time: 시간 데이터를 다루기 위한 모듈

 

※ 현재 날짜와 시간 가져오기

  • time.localtime()
  • time.ctime()
import time

print(time.localtime())

tm = time.localtime()
print(tm.tm_year)
print(tm.tm_mon)
print(tm.tm_mday)
print(tm.tm_hour)
print(tm.tm_min)

time.struct_time(tm_year=2023, tm_mon=2, tm_mday=24, tm_hour=23, tm_min=31, tm_sec=21, tm_wday=4, tm_yday=55, tm_isdst=0)
2023
2
24
23
31

 

import time
time.ctime()

'Fri Feb 24 23:32:16 2023'

 

 

※ 일시정지

  • time.sleep(초)
# 카운트 다운
# 실제 실행에 있어, sleep(초) 이후 출력한다.
print(3)

time.sleep(1)
print(2)

time.sleep(1)
print(1)

time.sleep(1)
print('start')

3
2
1
start

 

 


■ 파이썬 외부 모듈

  • 외부모듈 설치하기 : pip install 모듈명
  • 설치된 외부모듈 확인하기 : pip list

--> 외부모듈을 확인하고, 필요한 것을 install한다.

'Python 기초 공부' 카테고리의 다른 글

람다표현식 / map함수  (0) 2023.02.24
인수 전달 / 변수 사용  (0) 2023.02.24
함수 만들기와 사용  (0) 2023.02.24
딕셔너리(Dictionary) 활용해보기  (0) 2023.02.20
딕셔너리(Dictionary)  (0) 2023.02.20

+ Recent posts