[2024.09.26] 필수온라인 강의 Part1 파이썬 기본기 다지기 CH04 클래스와 모듈
클래스
- 객체 지향 프로그래밍
- 객체 지향 프로그래밍(object oriented programming)
- 프로그램 설계 방법론
- 프로그램을 여러 개의 독립적인 단위 '객체'라는 기본 단위로 나눔
- '객체'들의 상호작용을 통해 프로그램을 설계하고 개발하는 방식
- 코드 재사용 용이, 유지 보수 용이, 대형 프로젝트 적합
- 단점 : 실행속도가 느림, 객체가 많으면 프로그램 용량 커짐, 설계시 많은 시간 소요 - 클래스
- 동일한 무언가를 계속 만들어내는 설계 도면을 의미 (젤리는 만드는 틀 같은 느낌) - 객체
- 클래스로 만들어진 모든 것을 의미 (젤리 틀에 의해 만들어진 젤리) - 클래스로 만드느 객체
- 객체마다 고유한 성질을 가지고 동일한 클래스로 만든 객체들은 서로에 영향을 주지 않음 (젤리마다 맛이랑 색이 달라도 서로에게 영향을 주지 않음, 젤리를 하나 먹었다고 해서 다른 젤리들에게 영향을 주는 것이 아님) - 클래스 선언
- class 키워드를 사용하여 선언
class 클래스 이름 :
클래스 내용
class TeddyBearJelly: #예시
pass
- 객체와 인스턴스
- 객체(object) : 'a = classname()'로 만들었다면 a 는 객체 / 'red_jelly = TeddyBearJelly()'는 red_jelly가 객체
- 인스턴스(instance) : red_jelly는 TeddyBearJelly의 인스턴스
- 특정 객체가 어떤 클라스의 객체인지를 과나계를 설명할 때 쓰는 말 : 관계성 표현의 단어!!!!
- 인스턴스 생성
- 클래스 기반으로 만들어진 객체를 인스턴스라고 부름
- 클래스 인스턴스를 생성하려면 클래스 이름 뒤에 ( )괄호를 적으면 됨 : 인스턴스 이름 = 클래스 이름() - 메소드
- 클래스가 가지고 있는 함수
- 클래스 내부의 함수의 첫번째 매개변수는 반드시 self 입력!
: 객체 호출시, 호출한 객체 자신이 전달되기 때문에 self를 사용하는 것
class 클래스 이름 :
def 메소드 이름(self, 추가적인 매개변수) :
pass
class TeddyBearJelly : # 곰돌이 젤리 클래스 선언
def set_info(self, color, taste): # 'set_info' 함수 선언 : 젤리 생성시 필요한 속성 입력
self.color = color
self.taste = taste
def print_info(self): # 'print_info' 함수 선언 : 젤리 속성 출력
print("===================")
print("Color : ", self.color)
print("Taste : ", self.taste)
print("===================")
yellow_jelly = TeddyBearJelly() # 젤리 객체 선언
yellow_jelly.set_info("yellow", "lemon") # 젤리 객체의 필요한 속성 입력 # 메소드 사용
print(yellow_jelly.color) -> yellow 출력
print(yellow_jelly.taste) -> lemon 출력
yellow_jelly.print_info()
-> 출력
===================
Color : yellow
Taste : lemon
===================
- 생성자
- 클래스로부터 인스턴스가 생성될 때 자동으로 실행되는 함수
- 클래스를 실행하면 가장 먼저 생성자인 '__init__' 함수가 호출
- '__init__' 함수는 인스턴스의 생성과 동시에 필요한 정보를 입력받도록 구현하는 역할
class 클래스 이름 :
def __init__(self, 추가적인 매개변수) :
pass
- 클래스 내부 첫번째 매개변수는 self! (중요함) : 객체 호출 시 객체 자신이 전달! (위에 동일내용있음)
class TeddyBearJelly : # 곰돌이 젤리 클래스 선언
def __init__(self, color, taste): # 'set_info' 메소드를 '__init__' 메소드로 이름 변경
self.color = color
self.taste = taste
# 젤리 리스트 선언
jelly = [
TeddyBearJelly("red", "strawberry"),
TeddyBearJelly("yellow", "lemon"),
TeddyBearJelly("green", "apple")
]
print(jelly[0].color) -> red 출력
print(jelly[0].taste) -> strawberry 출력
- 상속 : 물려받다는 의미
- 새로운 클래스를 만들 때, 기존 클래스의 기능을 받기 위함
- 기존 클래스를 변경하지 않고 기능을 추가하거나 기존 기능을 변경할 때 사용
- 기존 클래스가 라이브러리 형태로 제공 or 수정되지 않을 때 사용
- 상위 클래스(부모, parent, super class) / 하위 클래스(자식, child, sub class)
- 상속 선언 : 자식 클래스 선언 시 소괄호로 부모클래스 포함
- 메소드 오버라이딩 : 부모 클래스의 메소드를 자식 클래스에서 재정의
- 일반적인 경우 : 자식 클래스에서 생성된 객체의 메소드를 부르면 부모 클래스 메소드 무시
- 부모 메소드 호출 : 둘다 수행하고 싶을 때 사용 : super() 키워드 사용하여 호출
# 부모 클래스 선언
class Jelly :
def __init__(self, color, taste):
self.color = color
self.taste = taste
def print_info(self):
print("부모 클래스입니다.")
print("젤리")
red_jelly = Jelly("red", "strawberry") # 부모 클래스로 객체 생성
red_jelly.print_info() # 부모 클래스의 print_info() 함수
-> 부모클래스 입니다. 젤리 출력
# 자식 클래스 선언
class TeddyBearJelly(Jelly): # 자식 클래스를 선언할 때 소괄호로 부모 클래스를 포함 : 일반적인 메소드 오버라이딩
def print_info(self):
print("자식 클래스입니다.")
print("곰돌이 젤리")
print("Taste : ", self.taste)
print("Color : ", self.color)
# 자식 클래스에서 생성된 메소드로 부모 클래스의 메소드 무시
yellow_jelly = TeddyBearJelly("yellow", "lemon") # 자식 클래스로 객체 생성
yellow_jelly.print_info() # 자식 클래스의 print_info() 함수
-> 출력 값
자식 클래스입니다.
곰돌이 젤리
Taste : lemon
Color : yellow
# 자식 클래스 선언
class HeartJelly(Jelly): # 자식 클래스를 선언할 때 소괄호로 부모클래스를 포함
def print_info(self):
super().print_info() # 부모 메소드 호출 : super() 키워드를 사용하여 자식 클래스에서 부모 클래스 호출 가능
print("자식 클래스입니다.")
print("하트 젤리")
print("Taste : ", self.taste)
print("Color : ", self.color)
green_jelly = HeartJelly("green", "apple") # 자식 클래스로 객체 생성
green_jelly.print_info() # 자식 클래스의 print_info() 함수
-> 출력값
부모 클래스입니다.
젤리
자식 클래스입니다.
하트 젤리
Taste : apple
Color : green
- 다중 상속
- 자식 클래스를 선언할 때, 소괄호로 원하는 부모클래스를 여러개 포함 가능 (개수 상관 없음)
class 부모 클래스1:
pass
class 부모 클래스2:
pass
class 자식 클래스(부모 클래스1, 부모 클래스2):
pass
모듈 : 여러 변수와 함수를 가지고 있는 집합
내부모듈
- 파이썬에 기본적으로 내장되어있는 모듈
- 파이썬 공식 홈페이지 참조 : https://docs.python.org/ko/3/library/index.html
- import
- 모듈 전체를 가지고 올 때 사용
- 모듈을 사용할 때, 모듈 뒤에 도트(.)를 입력하고 원하는 변수나 함수를 입력
import 모듈 이름
import math # 파이썬 math 모듈은 수학 함수가 담겨있음
print(math.floor(1.2)) # 모듈을 사용할 때는 모듈 뒤에 도트(.) 입력하고 원하는 변수나 함수를 입력
print(math.ceil(1.2))
- from
- 모듈 내에서 필요한 것만 가져올 때 사용
- 모듈에는 많은 변수와 함수가 있음 -> 활용하고 싶은 것만 선택해서 사용가능
- 여러개를 가지고 오고 싶은 변수 또는 함수 입력가능
from 모듈 이름 import 가져오고 싶은 변수 또는 함수
form 모듈 이름 import * # 모듈 모두를 가지고오고 싶을 때 사용
from math import floor, ceil
print(floor(1.2))
print(ceil(1.2))
- as
- 모듈의 별칭을 붙일 때 사용
- 모듈을 가지고 올 때, 이름 충돌하는 경우 발생할 때 사용
- 모듈의 이름이 너무 길어서 줄이고 싶을 때 사용함!
import 모듈 as 모듈의 별칭
import math as m
print(m.floor(1.2))
print(m.ceil(1.2))
외부모듈
- 외부 모듈은 파이썬에서 기본적으로 제공해주는 것이 아닌, 외부 사람들이 만들어서 배포한 모듈
- 외부 모듈 종류
- NumPy : 수치 계산
- Pandas : 데이터 처리
- Matplotlib : 데이터 시각화
- Seaborn : 데이터 시각화
- BeautifulSoup : 웹 데이터 수집
- Scikit-Learn : 머신러닝
- 외부모듈 실습 : seaborn으로 실습
seaborn : 데이터 시각화의 고급버전
외부모듈 사용하기
1. 모듈 설치 : 패키지가 없는 경우, 설치 명령어 사용 : pip install seaborn
pip install 모듈 이름
2. 불러오기 : import 구문을 통해서 불러오고, as로 별칭 지정해주기
import seaborn as sns
3. 데이터 불러오기 : seaborn 라이브러리에서 제공하는 titanic 데이터를 불러오기 : load_dataset() 활용
titanic = sns.load_dataset('titanic') # titanic 데이터 불러오기
4. 데이터 파악 : head() 함수를 통하여 상단 5개의 행을 파악
titanic.head() # .head() : 데이터의 상단 5개 행 출력
- 어떤 데이터를 담고 있는지 확인이 가능함
- info( ) 함수 : 행과 열의 크기, 컬럼명, 결측치, 데이터 타입 확인
print(titanic.info()) # 행과 열의 크기, 컬럼명, 컬럼별 결측치, 컬럼별 데이터 타입
5. 데이터 시각화
- swarmplot( ) 함수 : 데이터의 분산까지 고려하여 데이터 포인트가 서로 중복되지 않도록 시각화. 즉, 데이터가 퍼져 있는 정도를 입체적으로 파악 가능 : 매개변수(x축 변수, y축 변수, 데이터 셋 , hue : 특정 열 데이터로 색상을 구분하여 출력)
sns.swarmplot(x='class', y='age', data=titanic, hue='sex') # 이산형 변수의 분포 - 데이터 분산 고려 (중복 X)
성별정보로 색상을 다르게 표현했고, x는 클라스, y는 나이를 표현 한 것
모듈과 패키지
- 모듈을 만들기 : 현업에서 일을 하다보면 모듈을 생성하거나, 기존에 있는 모듈을 입맛대로 만들어야하는 경우가 다수 발생
- 그래서 모듈을 만들 줄도 알아야함
1. 폴더 만들기
2. 폴더 안에 py 파일 생성하기
3. 파일 안에 코드 추가하기
4. 메인.py 파일 만들기
- 메인.py에는 모듈을 불러올거고, 모듈1에서 구현한 add함수를 불러와서 출력까지 해볼 것.
5. 출력해보기 (구글 코랩 노트북에서 메인.py 파일 실행해보기)
- ! python 키워드 사용
- .py 파일이 있는 경로 입력
! python /content/module_folder/main.py # main.py 파일 실행
-> 1 + 2 + 3인 6이 출력
- 패키지 : 모듈이 모여서 구조를 이룬 것
- 도트(.)를 사용하여 파이썬 모듈을 디렉터리 구조로 관리할 수 있게 해줌
- 모듈 이름이 A.b인 경우, A는 패키지이고 b는 A패키지의 b모듈 의미
예외처리(오류, 예외처리기법)
오류 : 구문오류와 예외(런타임 오류)
- 구문오류 : 프로그램 실행 전에 발생하는 오류
- 조건문, 반복문의 들여쓰기, 괄호개수 등 문제로 발생
- 실행조차 되지 않음 : 예외 처리 방법으로 해결 X : 보통 문법문제라 수정으로 해결 - 런타임 오류 : 프로그램 실행 중에 발생하는 오류
- 예외 처리를 통해 문제를 해결 할 수 있음
myList = [1, 2, 3, 4]
myList[3] # myList[3]은 myList에서 얻을 수 있는 값으로 수정하여 오류 해결
- 예외 처리 기법
- 예외 처리는 예외를 해결하는 것
- 프로그램이 강제로 종료되는 일 없이 예외 처리를 하고 정상적으로 종료
- try- except 구문
try :
예외가 발생할 가능성이 있는 코드 # try 문 안에는 예외가 발생할 가능성이 있는 모든 코드 삽입
except :
예외가 발생했을 때 실행할 코드 # except 문 안에는 예외가 발생했을 때 실행할 모든 코드 삽입
try :
myList = [1, 2, 3, 4]
myList[7]
except :
print("예외가 발생하였습니다.")
try :
myList = [1, 2, 3, 4]
myList[7]
except :
pass # except 문 안에 pass 키워드를 넣으면 아무것도 출력하지 않고 강제 종료도 막을 수 있음
- try- except-else 구문
try :
예외가 발생할 가능성이 있는 코드 # try 문 안에는 예외가 발생할 가능성이 있는 모든 코드 삽입
except :
예외가 발생했을 때 실행할 코드 # except 문 안에는 예외가 발생했을 때 실행할 모든 코드 삽입
else :
예외가 발생하지 않았을 때 실행할 코드 # else 문 안에는 예외가 발생하지 않았을 때 실행할 코드 삽입
try :
Number = int(input("숫자 입력 : "))
except :
print("예외가 발생하였습니다.")
else :
print("입력한 숫자는 ", Number, "입니다.")
숫자 입력에 숫자를 넣으면 else문이 나오고 문자를 넣으면 except의 print가 나옴
- try- except-finally 구문
try :
예외가 발생할 가능성이 있는 코드 # try 문 안에는 예외가 발생할 가능성이 있는 모든 코드 삽입
except :
예외가 발생했을 때 실행할 코드 # except 문 안에는 예외가 발생했을 때 실행할 모든 코드 삽입
finally :
예외 발생 여부와 상관없이 무조건 실행할 코드 # finally 문 안에는 예외 발생 여부와 상관없이 무조건 실행할 코드 삽입
try :
Number = int(input("숫자 입력 : "))
except :
print("예외가 발생하였습니다.")
finally :
print("finally 문은 무조건 실행하는 코드")
- try- except-else-finally 구문
try :
예외가 발생할 가능성이 있는 코드 # try 문 안에는 예외가 발생할 가능성이 있는 모든 코드 삽입
except :
예외가 발생했을 때 실행할 코드 # except 문 안에는 예외가 발생했을 때 실행할 모든 코드 삽입
else :
예외가 발생하지 않았을 때 실행할 코드 # else 문 안에는 예외가 발생하지 않았을 때 실행할 코드 삽입
finally :
예외 발생 여부와 상관없이 무조건 실행할 코드 # finally 문 안에는 예외 발생 여부와 상관없이 무조건 실행할 코드 삽입
try :
Number = int(input("숫자 입력 : "))
except :
print("예외가 발생하였습니다.")
else :
print("입력한 숫자는 ", Number, "입니다.")
finally :
print("finally 문은 무조건 실행하는 코드")
-> 이 부분은 각각을 서로 다르게 계속 조합하여서 쓸 수 있음! 이것을 맞는 것을 잘 꺼내서 사용하는 게 중요함
'Study > Python' 카테고리의 다른 글
파이썬 라이브러리- NumPy(수치계산라이브러리) (0) | 2024.09.27 |
---|---|
파이썬 라이브러리 개념 (4) | 2024.09.26 |
파이썬 기본기_입출력과 제어문 (4) | 2024.09.26 |
파이썬_변수와 자료형 (2) | 2024.09.26 |
파이썬에 대한 가장 기초적인 설명 (3) | 2024.09.26 |