AI 부트캠프 | Week 2-2) (#클래스, #모듈, #예외처리)

Gomcha ·2023년 7월 27일
0

FC AI 6기 부트캠프

목록 보기
3/13
post-thumbnail

0. 목차

1. 클래스
2. 모듈
3. 예외처리

1. 클래스

01. 객체지향 프로그래밍

  • OOP,Object oriented Programming
    - 프로그램 설계 방법론
    - 여러 개의 독립단위인 '객체'라는 기본 단위로 나누어 '객체'들의 상호작용을 통해 프로그램을 설계하고 개발

02. 클래스와 객체

02-1) 클래스

1) 정의 : 동일한 무언가를 계속 만들 수 있는 설계 도면

2) 특징
- 객체마다 고유 성질을 가짐
- 동일한 클래스로 만든 객체들은 서로 영향을 주지 않음

3) 클래스 선언

class 클래스 이름 :
클래스 내용

class TeddiBearJelly():
  pass

02-1) 객체/인스턴스

1) 정의

  • 객체 : 클래스로 만들어진 모든 것

    'red_jelly=TeddyBearJelly()'로 만든 red_jelly는 객체

  • 인스턴스 : red_jelly는 TeddyBearJelly의 인스턴스

    인스턴스 이름 = 클래스 이름()

03. 메소드

1) 정의

  • 클래스가 가지고 있는 함수

    class 클래스 이름:
    def 메소드 이름(self, 추가 매개변수) :
    pass
    2) 특징
    - 클래스 내부 함수의 첫 번째 매개변수는 반드시 self 입력

# 곰돌이 젤리 클래스 선언
# 'set_info' 함수 선언 : 젤리 생성시 필요한 속성 입력
# 'print_info' 함수 선언 : 젤리 속성 출력

class TeddyBearJelly:
  def set_info(self,color,taste):
    self.color=color
    self.taste=taste

  def print_info(self):
    print("=================")
    print("Color : ", self.color)
    print("Taste : ", self.taste)
    print("=================")
# 젤리 객체 선언
yellow_jelly=TeddyBearJelly()

# 젤리 객체의 필요한 속성 입력
# 메소드 사용
yellow_jelly.set_info("yellow","lemon")

# yellow_jelly의 속성에 접근하는 방법

print(yellow_jelly.color)
print(yellow_jelly.taste)

# 젤리 객체 내용 출력
# 메소드 사용
yellow_jelly.print_info()

04. 생성자

1) 정의
- constructor : 클래스로부터 인스턴스가 생성될 때, 자동으로 실행되는 함수
- 가장 먼저 생성자인 'init' 함수 호출

class 클래스 이름:
def init(self, 추가 매개변수) :
pass

# 메소드는 클래스 내부의 함수를 의미
# '5. 메소드'에서 구현했던 'TeddyBearJelly' 클래스의
# 'set_info( )' 함수가 데이터를 입력받는 역할 수행함
# 'set_info' 메소드를 '__init__' 메소드로 이름 변경

# 곰돌이 젤리 클래스 선언
# 생성자 선언
class TeddyBearJelly:
  def __init__(self, color, taste):
    self.color=color
    self.taste=taste
    
# 젤리 리스트 선언
jelly=[TeddyBearJelly("red","strawberry"),TeddyBearJelly("yellow","lemon"),TeddyBearJelly("green","apple")]

# jelly 인스턴스의 속성에 접근하는 방법
print(jelly[1].color)
print(jelly[0].taste)

05. 상속

1) 기능

  • 새로운 클래스를 만들 때, 기존에 있던 클래스의 기능을 물려 받을 수 있음

2) 특징

  • 기존 클래스를 변경하지 않고 기능을 추가하거나 기존 기능 변경시 사용
  • 기존 클래스가 라이브러리 형태로 제공되거나 수정이 허용되지 않는 상황에 사용

05-1) 상속 선언

1) 정의

  • 자식 클래스를 선언할 때, 소괄호로 부모 클래스 포함

2) 특징

  • 자식 클래스에서 부모 클래스 속성과 메소드는 별도 기재 불필요

05-2) 메소드 오버라이딩

1) 정의

  • 부모 클래스의 메소드를 자식 클래스에서 재정의
    2) 종류
  • 일반적
    - 자식 클래스에서 생성된 객체의 메소드를 부르면 부모 클래스 메소드는 무시
  • 부모 메소드 호출
    - 부모 클래스 메소드도 수행, 자식 클래스 메소드도 같이 수행하고 싶을 때 사용
    - super()키워드 사용하여 자식 클래스 내에서 부모 클래스 호출
# 부모 클래스 선언

class Jelly:
  def __init__(self, color,taste):
    self.color=color
    self.taste=taste

  def print_info(self):
    print("부모 클래스입니다.")
    print("젤리")

# 자식 클래스 선언
# 자식 클래스를 선언할 때 소괄호로 부모 클래스를 포함
# 일반적인 메소드 오버라이딩
# 자식 클래스에서 생성된 메소드로 부모 클래스의 메소드 무시

class TeddyBearJelly(Jelly):
  def print_info(self):
    print("자식 클래스입니다.")
    print("곰돌이 젤리")
    print("Taste : ", self.taste)
    print("Color : ", self.color)

# 자식 클래스 선언
# 자식 클래스를 선언할 때 소괄호로 부모클래스를 포함
# 부모 메소드 호출
# super() 키워드를 사용하여 자식 클래스에서 부모 클래스 호출 가능

class HeartJelly(Jelly):
  def print_info(self):
    super().print_info()
    print("자식 클래스입니다.")
    print("하트 젤리")
    print("Taste : ", self.taste)
    print("Color : ", self.color)
    
# 부모 클래스로 객체 생성
# 부모 클래스의 print_info() 함수

red_jelly=Jelly("red","strawberry")
red_jelly.print_info()

# 자식 클래스로 객체 생성
# 자식 클래스의 print_info() 함수
# 자식 클래스에서 생성된 메소드로 부모 클래스의 메소드 무시
yellow_jelly=TeddyBearJelly("yello","lemon")

yellow_jelly.print_info()

# 자식 클래스로 객체 생성
# 자식 클래스의 print_info() 함수
# super() 키워드를 사용하여 자식 클래스에서 부모 클래스 호출 가능
green_jelly=HeartJelly("green","apple")

green_jelly.print_info()

05-3) 다중 상속

class 부모 클래스1:
pass
class 부모 클래스2:
pass
class 자식 클래스(부모 클래스1, 부모 클래스2):
pass

2. 모듈

01. 내부 모듈

1) 정의
: 여러 변수와 함수를 가지고 있는 집합
2) 종류

  • 숫자와 수학 모듈
    - numbers : 숫자 추상 베이스 클래스
    - math : 수학함수
    - random : 의사 난수 생성
    - statistics : 수학 통계 함수
  • 데이터형
    - datetime : 기본 날짜와 시간형
  • 일반 운영 체제 서비스
    - os : 기타 운영 체제 인터페이스
    - io : 스트림 작업을 위한 핵심 도구
    - time : 시간 액세스와 변환

01-1) import

  • 모듈 전체를 가져올 때 사용

    import 모듈 이름

import math

print(math.floor(1.2))
print(math.ceil(1.2))

01-2) from

  • 모듈 내에서 필요한 것만 골라서 가져올 때 사용
  • 여러개 가져오고 싶은 변수 또는 함수 입력 가능

    from 모듈 이름 import 가져오고 싶은 변수 또는 함수

  • 모듈 모두 가져오고 싶을 때 * 기호 사용

    from 모듈 이름 import *

from math import floor, ceil

print(math.floor(1.2))
print(math.ceil(1.2))

01-3) as

  • 모듈의 별칭을 붙일 때 사용
  • 모듈을 가져올 때 이름이 충돌하는 경우 사용

    import 모듈 as 모듈의 별칭

import math as m

print(m.floor(1.2))
print(m.ceil(1.2))

02. 외부모듈

1) 정의
: 파이썬 기본 제공 모듈이 아닌 외부 사람들이 만들어서 배포한 것
2) 종류

  • NumPy : 수치 계산
  • Pandas : 데이터 처리
  • Matplotlib : 데이터 시각화
  • Seaborn : 데이터 시각화
  • BeautifulSoup : 웹 데이터 수집
  • Scikit-Learn : 머신러닝

02-1) 모듈 설치

  • 패키지 없는 경우, 설치 명령어

    pip install 모듈이름

02-1) 모듈/데이터 불러오기

  • 모듈 불러오기 -> import구문 사용
  • 별칭 지정 -> as구문
import seaborn as sns
  • 데이터 불러오기
titanic=sns.load_dataset("titanic")

02-1) 모듈 파악 및 시각화

  • 데이터 파악
    - head( ) 함수 : titanic 데이터 상단 5개의 행 확인
    - info( ) 함수 : 행과 열의 크기, 컬럼명, 결측치, 데이터 타입 확인

  • 데이터 시각화
    - swarmplot( ) 함수 : 데이터의 분산까지 고려하여 데이터 포인트가 서로 중복되지 않도록 시각화. 즉, 데이터가 퍼져 있는 정도를 입체적으로 파악 가능
    swarmplot( ) 함수의 매개변수
    - x축 변수
    - y축 변수
    - 데이터 셋
    - hue : 특정 열 데이터로 색상을 구분하여 출력

sns.swarmplot(x='class',y='age',data=titanic,hue='sex')

3. 예외처리

01. 오류

  • 프로그램 실행 전 발생하는 오류
  • 구문, 런타임 오류 등 발생

02. 예외처리 기법

  • try 문 안에 예외 발생 가능성 있는 모든 코드 삽입
  • except 문 안에 예외 발생했을 때, 실행할 모든 코드 삽입
  • except 문 안에 pass 키워드 넣으면 출력X, 강제종료 막을 수 있음
  • else 문 안에 예외가 발생하지 않았을 때, 실행할 코드 삽입
  • finally 문 안에 예외 발생 여부와 상관없이 무조건 실행할 코드 삽입

02-1) try-except구문

try:
예외 발생할 가능성 있는 코드
except:
예외 발생했을 때 실행할 코드

# try 문 안에는 예외가 발생할 가능성이 있는 모든 코드 삽입
# except 문 안에는 예외가 발생했을 때 실행할 모든 코드 삽입
# except 문 안에 pass 키워드를 넣으면 아무것도 출력하지 않고 강제 종료도 막을 수 있음
try:
  myList=[1,2,3,4]
  myList[7]
except:
  pass

02-2) try-except-else구문

# try 문 안에는 예외가 발생할 가능성이 있는 모든 코드 삽입
# except 문 안에는 예외가 발생했을 때 실행할 모든 코드 삽입
# else 문 안에는 예외가 발생하지 않았을 때 실행할 코드 삽입
# 숫자 입력시 프로그램 정상 작동
try:
  Number=int(input("숫자 입력 : "))
except:
  print("예외가 발생하였습니다.")
else:
  print("입력한 숫자는 ",Number,"입니다.")

02-3) try-except-finally구문

# try 문 안에는 예외가 발생할 가능성이 있는 모든 코드 삽입
# except 문 안에는 예외가 발생했을 때 실행할 모든 코드 삽입
# finally 문 안에는 예외 발생 여부와 상관없이 무조건 실행할 코드 삽입
# 문자 입력 시 예외 발생
try:
  Number=int(input("숫자입력 : "))
except:
  print("예외가 발생하였습니다.")
finally:
  print("finally 문은 무조건 실행하는 코드")

02-4) try-except-else-finally구문

# try 문 안에는 예외가 발생할 가능성이 있는 모든 코드 삽입
# except 문 안에는 예외가 발생했을 때 실행할 모든 코드 삽입
# else 문 안에는 예외가 발생하지 않았을 때 실행할 코드 삽입
# finally 문 안에는 예외 발생 여부와 상관없이 무조건 실행할 코드 삽입
# 문자 입력 시 예외 발생
try:
  Number=int(input("숫자입력 : "))
except:
  print("예외가 발생하였습니다.")
else:
  print("입력한 숫자는 ",Number,"입니다.")
finally:
  print("finally 문은 무조건 실행하는 코드")
profile
공부하는 데이터 분석가 👩‍💻

0개의 댓글