054 클래스 상속 이해하기
클래스를 이용해서 코드를 작성하게 되면 장점?
1. 상속
2. 같은 코드를 여러번 나열하지 않아도 됨
> 코드가 간결해짐
ex) 우리도 처음에는 커피 키오스크를 하나의 코드 안에서 키오스크 기능들을 하나씩 구현하면서 코드를 늘려나감. 점점 기능이 많아지면서 코드가 길어지게 되었음. 클래스로 구성을 해서 코드를 정리함.
* 커피 키오스크 코드의 기능
- 주문
- 메뉴판 이미지 시각화
- 매출 정산
- 쿠폰적립
위의 기능들중에서 이미지 시각화 기능은 클래스 코드 내에서 여러번 반복되어서 수행되어야 하는데 그럴때 함수로 만들어놓게 되면 함수를 호출하기만 하면 됨.
> 나중에 머신러닝 기능 함수를 추가하기만 하면 됨(+음성인식 기능도 음성인식 함수만 클래스에 추가하면 됨)
새로운 기능들이 생길때 클래스(설계도)에 추가만 하면 됨
* 함수 생성시 주의사항 2가지
1. 재사용 가능
2. 기능은 한가지만 부여할 것
보통 관리자가 클래스를 만들고 실무자가 클래스를 상속 받아 코드를 작성함.
ex) 카드 만들기
1. 관리자가 카드의 주요기능을 담고 있는 Card() 클래스를 생성
카드의 주요기능 3가지 : 카드가 발급되었을때 0원으로 설정하는 기능, 카드 충전기능, 카드를 사용하는 기능
class Card():
def __init__(self):
self.cash = 0
print('카드가 발급되었습니다.', self.cash,'원이 있습니다.')
def charge(self, num):
self.cash = num
print('%d원이 충전되었습니다.'%self.cash)
def consume(self,num):
if self.cash < num:
print('충전이 필요합니다.')
else:
self.cash -= num
print('%d원이 사용되었습니다.'%num)
print('잔액은 %d원 입니다.'%self.cash)
2. 실무자 Card()클래스를 상속받아 영화 할인카드를 만듦
# 클래스 상속받는 방법
#class 클래스 이름( 상속받을 클래스 이름):
# 함수 작성
class Movie_Card( Card ):
pass # 일단 함수를 추가하지 않고 Card 클래스를 그대로 받기만 함.
m_card1 = Movie_Card() # Card 클래스를 상속받아 잘 생성됨.
m_card1.charge(10000) # 주요 기능 확인
m_card1.consume(2000)
클래스를 상속받았으므로 처음부터 기능을 코딩하지 않아도 됨. 이후의 기능들에 대해서만 코딩하면 됨.
3. 영화할인 코드를 작성
class Movie_Card(Card): # 부모에게서 모든 변수와 함수를 상속받음
def consume(self, num, place): # 부모에게서 받은 consume함수를
if place == '영화관': # 내가 만든 함수로 덮어쓰기(overriding)
num = 0.9*num # 영화관에서 사용할 경우 10% 할인
if self.cash >= num:
self.cash -= num
print(place,'에서',num,'원이 사용되었습니다.')
else:
print('잔액이 부족합니다.')
else: # 영화관이 아닌 경우
if self.cash >= num:
self.cash -= num
print(place,'에서',num,'원이 사용되었습니다.')
else:
print('잔액이 부족합니다.')
문제201. 위의 영화할인 카드에 할인 장소를 추가해서 주유소에서도 10% 할인될 수 있도록 코드를 수정하시오.
class Movie_Card(Card):
def consume(self, num, place):
if place in ('영화관', '주유소'):
num = 0.9*num # 영화관, 주유소에서 사용할 경우 10% 할인
if self.cash >= num:
self.cash -= num
print(place,'에서',int(num),'원이 사용되었습니다.')
else:
print('잔액이 부족합니다.')
else: # 영화관이 아닌 경우
if self.cash >= num:
self.cash -= num
print(place,'에서',num,'원이 사용되었습니다.')
else:
print('잔액이 부족합니다.')
문제202. 스타벅스에서 사용하면 20% 할인하는 카드 설계도를 생성하시오.
class StarBucks_Card(Card):
def consume(self, num, place):
if place == '스타벅스':
num = 0.8*num # 스타벅스에서 사용할 경우 20% 할인
if self.cash >= num:
self.cash -= num
print(place,'에서',int(num),'원이 사용되었습니다.')
else:
print('잔액이 부족합니다.')
else: # 할인처가 아닌 경우
if self.cash >= num:
self.cash -= num
print(place,'에서',num,'원이 사용되었습니다.')
else:
print('잔액이 부족합니다.')
문제203. 위의 커피 키오스크 클래스를 상속받아서 클래스를 만드는데 Starbucks_Class로 설계도를 생성하시오. 클래스를 객체화시키면 다음과 같은 메시지가 출력되게 하시오.
k1=Starbucks_Class()
스타벅스 키오스크 시스템을 시작합니다.
class Starbucks_Class(Coffee_Class):
def __init__(self): # overriding
self.image("c:\\data\\kioskimage.png")
print('스타벅스 키오스크 시스템을 시작합니다.')
새로운 커피 가맹점에서 우리 키오스크 프로그램을 사용하겠다고 주문이 들어오면 상속을 이용해서 기존 키오스크 클래스를 상속받고 새로운 가맹점에 맞춰 몇가지 코드만 변경해주면 됨
'Study > class note' 카테고리의 다른 글
python / input (0) | 2021.12.20 |
---|---|
python / 예외처리 (0) | 2021.12.20 |
python / 클래스(이해, 클래스 멤버/인스턴스 멤버, 메소드, 생성자, 소멸자) (0) | 2021.12.16 |
커피키오스크+ 클래스 생성+이미지 추가 (0) | 2021.12.16 |
python / open, close (0) | 2021.12.16 |