Cute Running Puppy

Python

Python_15Day

jwjin 2019. 3. 6. 21:24
728x90

# 내장변수(멤버변수) , 매개변수

클래스에 내장변수를 추가합니다.

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문을 이용한 해설입니다.








728x90

'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