# 내장변수(멤버변수) , 매개변수
클래스에 내장변수를 추가합니다.
class Monster():
def __init__(self):
# self에 항목을 추가하면 모든 인스턴스에 생성됨
self.name = '슬라임'
a = Monster()
b = Monster()
print(f'이름 = {a.name}')
print(f'이름 = {b.name}')
생성자 함수는 __init__를 뜻합니다. 인스턴스를 생성할 때 데이터를 초기화 하는 역할을 수행합니다.
이때 옆에있는 self 는 인스턴스 자신을 의미하는 키워드(상대적인 의미)입니다.
self에 name(슬라임)을 추가해보고 출력해보면 a와 b 둘다 슬라임이 나오게 됩니다.
이번엔 생성자에 매개변수를 추가해 보면
class Monster():
# 아래와 같이 정의하면 Monster 생성시 반드시 이름이 필요해지게 됩니다.
def __init__(self, name):
self.name = name
a = Monster('슬라임')
b = Monster('드래곤')
print(f'이름 = {a.name}')
print(f'이름 = {b.name}')
self옆에 name을 추가하게 되면 클래스 생성시 반드시 이름이 필요해지게 됩니다.
그다음 a와b를 다른이름으로 저장하고 출력해보면 저장한대로 출력되게 됩니다.
__init__ 말고도 __str__내장 명령이 있습니다.
class Monster():
def __init__(self , name):
self.name = name
def __str__(self):
return f'이름 = {self.name}'
a = Monster('슬라임')
print(a)
__str__을 쓰고 명령을 해줍니다. 슬라임을 출력할것이기 때문에 출력명령을 써주고
슬라임 저장, print함수만 써주면 슬라임이라는 글자가 출력됩니다.
<메뉴 정보>
이름 종류 가격 행사여부
아메리카노 음료 2000원 행사중
프라푸치노 음료 3500원
파니니 빵 3200원 행사중
크로크무슈 빵 4000원
행사중인 제품들은 20%씩 할인이 적용됩니다.
다음을 구현하고 출력하라는 문제입니다.
class food():
def __init__(self, name , sort , price , event = False):
self.name = name
self.sort = sort
self.price = price
self.event = event
def __str__(self):
p = self.price
e = ''
if self.event:
p = p * 80 // 100
if self.event :
e = '행사중인 상품입니다'
return f'''이름 : {self.name}
종류 : {self.sort}
가격 : {p}원
{e}
'''
a = food('아메리카노' , '음료' , 2000 , event = True)
b = food('프라푸치노' , '음료' , 3500)
c = food('파니니' , '빵' , 3200 , event = True)
d = food('크로크무슈' , '빵' , 4000)
print(a,b,c,d , sep='\n')
이름과 같은 역할을 하는게 여러개 들어가 있으므로(종류 , 가격...)
여러개를 추가해 줍니다.(이름 , 종류 , 가격 , 행사여부가 반드시 입력되어야 하므로)
이때 행사를 하는 음식은 20퍼센트 할인을 한 가격으로 출력되어야 하기 때문에
미지수 p 와 e 를 잡아줍니다. (p는 계산역할 , e는 문장이 뜨게 하기 위한 역할)
그리고 if문을 써서 행사중일때에는 20퍼를 할인한 가격이 나오게 합니다.
그리고 또 행사중인 상품이라 출력되게 합니다.
그리고 이름 , 종류 , 가격 , 행사 여부 가 출력되게 저장하고 출력 해보면 ?
이름 : 아메리카노
종류 : 음료
가격 : 1600원
행사중인 상품입니다
이름 : 프라푸치노
종류 : 음료
가격 : 3500원
이름 : 파니니
종류 : 빵
가격 : 2560원
행사중인 상품입니다
이름 : 크로크무슈
종류 : 빵
가격 : 4000원
이런식으로 나옵니다.
그런데 이문제를 inline-if문을 써서 나타낼 수 있습니다. (inline-if ==> 참일때 if조건 참이 else 참이 아닐때)
class food():
def __init__(self, name , sort , price , event = False):
self.name = name
self.sort = sort
self.price = price
self.event = event
def __str__(self):
return f'''이름 : {self.name}
종류 : {self.sort}
가격 : {self.price * 80 // 100 if self.event else self.price}원
{'행사중인 상품입니다' if self.event else''}
'''
a = food('아메리카노' , '음료' , 2000 , event = True)
b = food('프라푸치노' , '음료' , 3500)
c = food('파니니' , '빵' , 3200 , event = True)
d = food('크로크무슈' , '빵' , 4000)
print(a,b,c,d , sep='\n')
# a의 이벤트를 종료하려면
a.event = False
print(a,b,c,d , sep='\n')
inline-if문을 이용한 해설입니다.
'Python' 카테고리의 다른 글
| Python_17Day (0) | 2019.03.08 |
|---|---|
| Python_16Day (0) | 2019.03.07 |
| Python_14Day (0) | 2019.03.05 |
| Python_13Day (0) | 2019.03.04 |
| Python_12Day (0) | 2019.02.28 |