Python 클래스, 모듈과 패키지, 표준라이브러리, 예외처리

클래스

클래스 기본 개념

  • 함수 그룹: 여러 개의 함수가 '그룹'으로 내장되어 있다.
  • 함수를 묶어서 사용 하기 위한 목적.

  • 클래스 이름을 지을 때, 대문자로 시작하기

  • 특수 메서드(함수):
    • def __명칭__   #던더(더블언더)
    • 초기화함수(생성자):
      • 클래스 호출하자 마자 호출
      • 속성 부여가 가장 큰 목적
      • def __init__(self, ):

  • 객체(인스턴스):
    • 객체(인스턴스)를 생성했다.
      • 속성을 갖고 있는 코드
      • 클래스를 호출해서 객체(인스턴스)를 생성
    • self:
      • 만들어질 객체, 객체의 대명사.


클래스 변수와 메서드

변수의 종류 - 인스턴스, 클래스

  • 인스턴스 변수
    • self.변수
    • 함수 안에서 선언
  • 메서드 변수
    • 클래스.변수  #생성할 때는 일반 변수 생성하듯이 생성
    • 클래스에서 선언

메서드의 종류 - 인스턴스, 클래스, 스태틱

  • 인스턴스 메서드
    • 정의: def 함수명(self, ):
    • 호출: self.함수명()
  • 클래스 메서드
    • 정의: @classmethod   #데코레이터를 붙여야 한다.
              def 함수명(cls, ):
    • 호출: 클래스명.함수명()
  • 스태틱 메서드
    • 클래스와 관련 없다. 그냥 묶어 놓는다.
    • 정의: @staticmethod
              dif 함수명():
    • 호출: self.함수명()

클래스 상속

기존 클래스의 일부 요소를 그대로 가져다 쓰자.

class 클래스명( 부모클래스 ):
    def __init__(self, a, b, c):
        super().__init__(a, b)
        self.c = c

    def move(self, speed):    # 그대로 상속 받는 것은 적을 필요 없음.
        super().move(speed)



모듈과 패키지 (파일과 폴더)

모듈 불러오기

  • 모듈 불러오기 (import는 파일명에 확장자 붙이지 않는다.)
    • import 파일명
    • import 파일명 as 별명

  • 모듈의 함수만 불러오기
    • from 파일명 import 함수명, 함수명
    • from 파일명 import *

name 변수

  • __name__:  '__main__' 또는 모듈명이 들어간다.
    • 직접 실행할 때: 
      • '__main__'
      • !python 모듈명.py
    • import할 때:
      • 모듈명

  • %%writefile example_module.py

    def hello_world():
        return "안녕하세요"

    if __name__ == '__main__':
        # 모듈이 직접 실행될 때만 실행되는 코드
        print('파일을 직접 실행했군요.')
        print(f'name변수 : {__name__}')
    else:
        print('파일이 임포트되었습니다.')
        print(f'name변수 : {__name__}')

  • # 직접 실행
    !python example_module.py
  • # import 실행 import example_module

디렉토리 만들기

  • 만들기: !mkdir 디렉토리명      #리눅스 운영체제에서 디렉토리 생성 명령어.
  • 참조: import 디렉토리명

  • import os
  • os.mkdir('  ')      #만들기
  • os.path.isdir('  ')  #디렉토리여부 확인 - 논리값

표준 라이브러리

오픈소스
  • 프레임워크: 틀, 기반. 산업에 필요한 기능을 모두 제공. 해당 생태계 안에서 개발.
  • 라이브러리: 도서관. 특정 영역에서만 사용. 부분적으로 가져와서 사용.

  • import datetime

  • import time
    • time.time()

  • import os
    • 파일 폴더를 만들 때, 제거할 때, 파일 폴더의 경로를 가져올 때
    • os.makedirs(new_directory)

  • import numpy as np
    • 통계
    • randn = np.random.randn(10)

  • import pandas as pd
    • 데이터 테이블

  • import cv2
    • 이미지

  • from sklearn.datasets import load_wine

  • import tensorflow as tf
    • 딥러닝

  • import torch
    • 딥러닝

예외처리

에러나서 코드가 멈추는 상황을 막겠다.
try만 중단하고 except 부터 끝까지 진행하자.

try, except

numbers = [1, 2, 3]

try:
    number = numbers[5]

except: # try 구문에서 에러발생시, 에러발생 대신 except구문 실행
    print("Index out of range.")

last = numbers[-1]
print(last)

특정 에러만 처리

try:
    result = "hello" + 5

except TypeError:
    print("Cannot add a string and an integer.")

  • TypeError: can only concatenate str (not "int") to str

  • ZeroDivisionError: division by zero

# 두가지 에러를 하나의 except구문으로 처리하기
try:
    a = 10 / 5 # zerodivsion error
    b = '5'
    result = a + b # type error
except (ZeroDivisionError, TypeError) as e:
    print(f'[!] error : {e}')

print('이후 코드 정상 작동')

try, except, else - 에러가 발생하지 않을 때만, 실행 구문 else:


try, except, finally - 항상 동작해야 하는 경우, 실행 구문 finally:

finally를 쓰지 않는 경우랑 뭐가 다를까?  
  • 함수 안에서 사용할 때, return을 만나도 종료하지 않고 finally: 구문을 처리한다.
  • return이 except랑 finally 모두에 있을 경우, finally return을 출력

고의로 에러 처리하기

x = 5
if x % 3 != 0:
    raise Exception('3의 배수가 아닙니다.')

댓글 쓰기

다음 이전