본문 바로가기

웹_프론트_백엔드/Python

2020.01.30

1. lex02_inheritance.py

# -*- coding: utf-8 -*-
# Cafe Management
# 카페에 togo(포장)라는 기능 추가 . 
# togo를 하는 경우에 200원 비용이 추가
# 1.Event를 상속받는 Togo class를 정의
# 2.Togo 객체를 생성해서 메서드 붙러보기 
# 3.Togo아닌 일반 Event 객체 생성하여 비교하기 
# calculate()  override 해보기 

menu_table = {'americano': 3000, 'latte': 6000, 'icecream': 3000}
print(type(menu_table))

class Event():
    def __init__(self, number):
        #속성 만들기 (property): init()에서 만들기 (초기화)
        self.id = number
        self.order_list = {}
        self.total=0
    def order (self, menu) :
        #print(menu)
        self.order_list =menu
    def print(self):
        print('주문번호:', self.id)
        for key, value in self.order_list.items(): 
            print('{0:10} {1:5} {2:5} {3:5}'.format(key, value,menu_table[key], value*menu_table[key]))
        print('Total: ', self.total)
    def calculate(self) :
        total =0
        for key, value in self.order_list.items(): 
            #print(key, value, menu_table[key], value*menu_table[key])
            total +=  value*menu_table[key]
        self.total = total
        
#상속 
class Togo(Event) :
    def calculate(self) :
        super().calculate()
        self.total+=200 #멤버변수. 인스턴스(객체) 변수
    def print(self) :
        super().print()
        print('포장비용추가 ', 200)
        
        
#객체 (인스턴스 생성)
#매장주문
event= Event(1) #__init__()호출
event.order({"americano":2, "latte":3})
event.calculate()
event.print()


#Togo        
togo = Togo(2)
togo.order({"americano":2, "latte":3}) 
togo.calculate()
togo.print()  

2. lex_phonebook.py

# -*- coding: utf-8 -*-
# Phonebook
# 1.아이디(번호)
# 2. 이름
# 3.전화번호
# 메서드 :1. __init__(), 2. print() 
# 객체를 만들어서 리스트에담아서 출력. (for문 이용)
#딕셔너리로 구성된 리스트 

#1. emailbook : phonebook + email주소만 추가 
#2. 객체 생성 print 
#3. phone_dic리스트에서 읽어서 객체를 이메일이 있으면 
#   emailbook객체를 만들고 phonbook객체를 만든다.출력을 한다. 
#json type 
phone_dic= \
[ 
    {'name':'leemin', 'number':'010-028-9382', 'email':'leemin@google.com' },
    {'name':'shin', 'number':'017-821-6521'},
    {'name':'parkchanho', 'number':'010-111-1111'}
] 
#리스트로 구성된 리스트 
#csv type
phone_list= \
[ 
    ['leemin', '010-028-9382'],
    ['shin', '017-821-6521'],
    ['parkchanho', '010-111-1111']
] 
#class정의 
class Phonebook() :
    def __init__(self, num, name, phone_number) :
        self.id=num;
        self.name = name;
        self.phone_number = phone_number
        
    def print(self) :
        print('{0:3} {1:10}  {2:15}'.format(self.id, self.name, self.phone_number))
        
#객체생성#1 - 딕셔너리로 구성된 리스트 
for i, p in enumerate(phone_dic) : 
    #print(p['name'], p['number'])
    phonebook = Phonebook(i, p['name'], p['number'])
    #print(phonebook.id, phonebook.name, phonebook.phone_number)
    phonebook.print()

#객체생성#2 - 리스트로 구성된 리스트
for i, p in enumerate(phone_list) : 
    #print(p['name'], p['number'])
    phonebook = Phonebook(i, p[0], p[1])
    #print(phonebook.id, phonebook.name, phonebook.phone_number)
    phonebook.print()

# Emailbook : Phonebook상속
class Emailbook(Phonebook) :
    def __init__(self, num, name, phone_number, email) :
        super().__init__(num,name, phone_number)
        self.email = email
    def print(self):
        super().print()
        print(self.email)
        
email = Emailbook(1, "shin", "008-999-9922", "shin@gmail.com")
email.print()

#객체생성#3 - 딕셔너리로 구성된 리스트에서 email이 있으면 email 객체를 만들고, 
#아니면 phonebook을 만든다. 
for i, p in enumerate(phone_dic) : 
    if 'email' in p : # key가 딕셔너리에 존재하는지에 따라 객체 다르게 생성
        print(p['name'], p['number'], p['email'])
        book = Emailbook(i, p['name'], p['number'], p['email'])
    else : 
        print(p['name'], p['number'])
        book = Phonebook(i, p['name'], p['number'])
    #print(phonebook.id, phonebook.name, phonebook.phone_number)
    book.print()

'웹_프론트_백엔드 > Python' 카테고리의 다른 글

2020.02.03  (0) 2020.02.04
2020.01.31  (0) 2020.02.03
2020.01.29  (0) 2020.01.29
2020.01.28  (0) 2020.01.28
2020.01.23  (0) 2020.01.23