목차
1. 클래스
1-1. 클래스 생성
- __init__: 매서드 생성자
# 학생 정보 관리 시스템
class Student: # class 이름은 앞에 대문자로 사용
def __init__(self,name,id,major):
self.name = name # 개체 변수를 의미함 (self.변수명)
self.id = id
self.major = major
self.grades = []
def add_grade(self, grade):
self.grades.append(grade)
def average_grade(self):
if not self.grades:
return 0
else:
return sum(self.grades) / len(self.grades)
student_1 = Student('홍길동', '0001', 'Data Science')
student_1.name
>>> '홍길동'
student_1.average_grade()
>>> 0
student_1.add_grade(100)
student_1.add_grade(80)
student_1.average_grade()
>>> 90.0
3-2. 상속과 매서드 오버라이딩
- 상속: class 클래스 이름(상속할 클래스 이름)
- 매서드 오버라이딩: 부모 클래스(상속한 클래스)에 있는 메서드를 동일한 이름으로 다시 만드는 것
# 상품 정보 관리
class Product:
def __init__(self, name, price): # Product 클래스 init 함수
self.name = name
self.price = price
def get_name(self):
return self.name
def get_price(self):
return self.price
class Book(Product): #부모 Project를 상속받아 Book을 만든다
def __init__(self, name, price, author):
super().__init__(name, price) # Product 클래스 init 함수
self.author = author
# 오버라이딩: 부모가 정의한 함수를 가져다가 변경함
def get_name(self):
return self.name.upper()
def get_author(self):
return self.author
book = Book('Harry Potter', 20000, 'J.K. Rowling')
book.get_name()
>>> 'HARRY POTTER'
product_1 = ('snack', 2000)
prodect_1.get_author # 에러: 자식에 있는 함수는 사용 못함
>>> NameError: name 'prodect_1' is not defined
2. 제너레이터와 이너레이터
2-1. 제너레이터
def make_bread(n): #n: 총 몇 개를 만들지
for i in range(n):
bread = '빵' + str(i+1)
yield bread
def package_bread(bread):
print(f'{bread} 포장 완료!')
n = 5
make_bread_gen = make_bread(n)
type(make_bread_gen)
>>> generator
# 한 번 셀 실행이 한 번의 요청
bread = next(make_bread_gen)
package_bread(bread)
>>> 빵1 포장 완료!
for bread in make_bread_gen:
package_bread(bread)
>>> 빵2 포장 완료!
빵3 포장 완료!
빵4 포장 완료!
빵5 포장 완료!
2-2. 이터레이터
class Season:
def __init__(self):
self.data = ["봄", "여름", "가을", "겨울"]
self.index = 0
def __iter__(self):
return self
def __next__(self):
if self.index < len(self.data):
cur_season = self.data[self.index]
self.index += 1
return cur_season
else:
raise StopIteration
season = Season()
season.data
>>> ['봄', '여름', '가을', '겨울']
next(season)
>>> '봄'
next(season)
>>> '여름'
season.data
>>> ['봄', '여름', '가을', '겨울']
3. 예외 처리
3-1. try, except 문
try:
result = 10 / 0
except ZeroDivisionError as e: #내장 클래스
print(e)
>>> division by zero
try:
print(no_variable)
result = 10 / 0
except NameError as e: #내장 클래스
print(e)
except ZeroDivisionError as e: #내장 클래스
print(e)
>>> name 'no_variable' is not defined
3-2. try, finally
- 예외 발생 여부와 상관없이 finally절에서 f.close()로 열린 파일을 닫을 수 있다.
try:
f = open('foo.txt', 'w')
# 무언가를 수행한다.
(... 생략 ...)
finally:
f.close() # 중간에 오류가 발생하더라도 무조건 실행된다.
3-3. try, else
- try문 수행중 오류가 발생하면 except절이 수행되고 오류가 없으면 else절이 수행된다.
try:
age=int(input('나이를 입력하세요: '))
except:
print('입력이 정확하지 않습니다.')
else:
if age <= 18:
print('미성년자는 출입금지입니다.')
else:
print('환영합니다.')
>>> 나이를 입력하세요: d
>>> 입력이 정확하지 않습니다.
>>> 나이를 입력하세요: 15
>>> 미성년자는 출입금지입니다.
'Python' 카테고리의 다른 글
(도전)파이썬, python: 카페에서 음료 주문 받기 (1) | 2023.05.05 |
---|---|
(도전)파이썬, python: 랜덤 숫자 맞추기 (0) | 2023.05.04 |
(문제 풀이)파이썬, python: 반복문과 제어문 (0) | 2023.05.03 |
(파이썬 다시 보기)파이썬, python: 3. 제어문과 함수 (0) | 2023.05.03 |
(파이썬 다시 보기)파이썬, python: 2. 자료형_리스트, 튜플, 딕셔너리, 집합 (0) | 2023.05.02 |
댓글