안녕하세요 이승혁입니다.
지난 시간에는 클래스에 대해 실습을 진행해 보았습니다.
※ 클래스의 상속
어떤 클래스가 가지고 있는 모든 멤버나 메소드를, 상속 받는 클래스가 모두 사용할 수 있습니다.
상속을 해주는 클래스 : 부모클래스, 슈퍼클래스
상속을 받는 클래스 : 자식클래스, 서브클래스
상속 선언은 class 자식클래스(부모클래스): 형태로 정의합니다.
클래스는 상속이 가능해서 중요하고 기본적인 코드는 상속을 받고 나는 다른 기능만 구현하면 된다.
팀장 팀원1 팀원2
↓ ↓ ↓
기본카드 클래스 영화 할인 카드 주유 할인 카드
기본적인 기능
자식 클래스는 부모 클래스 여러 개를 상속 받을 수 있습니다.
calss 자식클래스(부모클래스1,부모클래스2...): 형태로 정의합니다.
실습 1. 총 클래스 대신 카드 클래스 만들어보기
https://lsh-story.tistory.com/27
위 포스팅의 마지막 부분을 확인하면 되겠습니다.
card 1=Card()
카드가 발급되었습니다.
card1.charge(10000)
10000원이 충전되었습니다.
card1.consume(1400)
1400원 사용되었습니다.
잔액은 8600원입니다.
위와 같은 문구가 출력되도록 클래스를 생성합니다.
class Card():
def __init__(self):
self.money=0
print('카드가 발급되었습니다.')
def charge(self,money):
self.money+=money
print(money,'원이 충전되었습니다.')
def consume(self,money):
if money<=self.money:
self.money-=money
print(money,'원이 사용되었습니다.')
print('잔액은 %d원입니다.'%self.money)
else:
print('잔액이 부족합니다.')
card1=Card()
card1.charge(10000)
card1.consume(1400)
실습 2. 영화 카드 할인 클래스 생성하기 , 위에서 만든 카드 클래스를 상속받는 Movie_card 클래스를 생성합니다.
같은 기능을 사용할 수 있는지 사용해 봅니다.
class Movie_card(Card):
pass
movie_card=Movie_card()
movie_card.charge(10000)
movie_card.consume(1000)
Movie_card 클래스의 내용은 Card의 멤버와 메소드를 상속받아 동일하게 사용할 수 있는 모습입니다.
실습 3. Movie_card 클래스를 수정해 consume 메소드의 변수에 사용처를 추가하고, 영화관이면 20퍼센트 할인하는 코드를 작성해보기
class Movie_card(Card):
def consume(self,money,loc):
if loc=='영화관':
money*=0.8
if money<=self.money:
self.money-=money
print('%s에서 %d원이 사용되었습니다.'%(loc,money))
print('잔액은 %d원입니다.'%self.money)
else:
print('잔액이 부족합니다.')
movie_card=Movie_card()
movie_card.charge(10000)
movie_card.consume(1000,'영화관')
Card() 클래스의 consume : 변수로 금액, 충전된 금액에서 차감
Movie_card() 클래스의 consume : 변수로 금액, 사용처, 영화관이면 할인, 충전 금액에서 차감
위와 같이 상속받은 메소드의 이름은 같지만, 변수를 다르게 설정하여
다른 기능을 하게 하는 것을 오버라이딩 이라고 합니다.
오버라이딩 : 상속받는 자식 클래스가 부모 클래스의 특정 기능을 다른 코드로 대체 하는 것
부모클래스(card) --------------------> 자식클래스(Movie_card)
consume consume
부모 consume에 추가로 영화 할인 기능을 추가함
오버로딩 : 같은 이름의 함수에 매개 변수를 다르게 하여 여러 개 사용하는 방법
파이썬에서는 사용하지 않습니다.
주로 자바(Java)에서 사용하는 기능입니다.
※ 클래스 멤버 / 인스턴스 멤버
클래스에서 선언된 변수는 클래스 멤버와 인스턴스 멤버가 있다.
클래스 멤버 : 클래스 메소드 바깥에서 선언되는 변수이다.
인스턴스 멤버 : 클래스 메소드 안에서 self와 함께 선언되는 변수이다.
class Employee:
raise_amount=2 # 클래스 변수
def __init__(self,first,last,pay): # 객체 생성자
self.first=first
self.last=last
self.pay=pay
self.email=first.lower()+'_'+last.lower()+'@gmail.com'
self.raise_amount=1.1 # 인스턴스 변수
def full_name(self):
return '{} {}'.format(self.first,self.last)
def instance_raise(self):
self.pay=int(self.pay*self.raise_amount)
def class_raise(self):
self.pay=int(self.pay*Employee.raise_amount)
emp_seunghyuk=Employee('seunghuyk','lee',3000)
print(emp_seunghyuk.full_name())
print('before raise :',emp_seunghyuk.pay)
emp_seunghyuk.instance_raise()
print('instance raise :',emp_seunghyuk.pay)
emp_seunghyuk.class_raise()
print('class raise :',emp_seunghyuk.pay)
이번 포스팅에서는 클래스의 상속과 오버로딩, 오버라이딩에 대해서 실습을 진행해 보았습니다.
다음 시간에는 예외처리(try ~ except)에 대해 실습을 진행해 보도록 하겠습니다.
'프로그래밍 > Python' 카테고리의 다른 글
Python-13) filter, 최대값, 최소값, 문자열 슬라이싱, 조작 : Python install, 파이썬 마스터 (2) | 2020.12.12 |
---|---|
Python-12) input, type, % , divmod, abs, round ,int ,float (0) | 2020.12.04 |
Python-11) Python - Oracle 연동하기 , python sql, 파이썬 sql (0) | 2020.11.25 |
Python-10) 예외 처리하기(try ~ except) : Python, Python 설치, 파이썬 마스터 (0) | 2020.11.24 |
Python-8) Class : Python, Python 설치, 파이썬 클래스, 객체 (0) | 2020.11.17 |
Python-7) Numpy : Python, Python 설치, 파이썬 마스터, 객체지향 언어 (0) | 2020.11.16 |
Python-6) 함수, 모듈, 패키지 : Python, Python 설치, 파이썬 마스터 (0) | 2020.11.11 |
Python-5) tuple , list, dictionary : Python, Python 설치, 파이썬 마스터 (0) | 2020.11.10 |