본문 바로가기

파이썬

파이썬 상속 (Inheritance)

이번 블로그에서는 상속을 통해 코드문을 반복해서 작성하지 않아도 되는 재사용성의 유용함과 객체지향 프로그램밍의 기본 개념을 이해할 수 있도록,  파이썬의 상속을 활용하여 간단한 라멘 주문 시스템을 만들어보겠다.

 

객체지향 프로그래밍은 컴퓨터 프로그램을 만들 때 사용되는 방법 중 하나인데, 이 방법은 우리가 실제 세상을 바라보는 방식과 비슷하게 프로그램을 만들게 해준다. 예를 들어, 라면가게에서 라면을 시켜먹는다고  할 때, 라면은 매운라면, 달걀을 얹은 라면, 꼬들꼬들한 라면 등 여러가지 종류가 있지만 이 모두 "라면" 이라는 큰 그룹에 속해있다.

 

그리고 각 라면은 각기 다양한 특징을 가지고 있는데, 이러한 특성과 기능을 가진 하나의 라면을 '객체'라고 한다. 이렇게 프로그램을 만들면, 여러 종류의 라면처럼 다양한 객체들을 만들고, 필요한 기능을 더하거나 바꿀 수 있어서 프로그램을 더 쉽게 만들고, 관리할 수 있게 도와준다. 

기본 클래스 생성

먼저, 기본 라면 클래스인 Ramen을 정의한다. 이 클래스는 라멘의 이름, 가격, 옵션을 속성으로 가지고 있으며, 손님이 메뉴을 주문하는 order 메서드와 주문을 받고 가격은 안내하는 ordered 라멘 육수의 정도를 물어보는 level_ask 메서드를 통해 주문 내용을 출력한다. 

class Ramen: 
  def __init__(self, name, price, option):
    self.name = name
    self.price = price
    self.option = option 

  def order(self):
    print(f"I'd like to oder a {self.name} ramen please with {self.option} option.")

  def ordered(self):
    print(f"you have ordered a {self.name} with {self.option} option. The price is 7 dollars")

  def level_ask(self):
    print(f"what level of ramen would you like?")
  • __init__ 메서드: 객체가 생성될 때 호출되며, 라면의 이름(name), 가격(price), 옵션(option)을 초기화한다.

spicyramen 클래스 생성

Ramen 클래스를 상속받는 spicyramen 클래스를 정의한다. 라면 이름, 가격, 옵션, 육수 레벨 크기 정보를 가지고 있다. 

class spicyramen(Ramen):
  def __init__(self,name,price,option):
    super().__init__(name,price,option)
    self.very_spicy = False
  def spicy_level(self):
    print("I'll choose spicy level 3")

 

  • super().__init__ 메서드: 부모 클래스인 Ramen의 __init__ 메서드를 호출하여 name, price, option을 초기화한다.

shoyuramen클래스 생성

마찬가지로 Ramen 클래스를 상속받는 shoyuramen 클래스를 정의한다. 

class shoyuramen(Ramen):
  def __init__(self,name,price,option):
    super().__init__(name,price,option)
    self.very_salty = True 
  def shoyu_level(self):
    print("I'll choose salty level 5")

객체 생성 및 메서드 호출

객체지향프로그래밍에서는 객체가 없으면 출력이 되지 않는다. 

객체를 생성해서 이제 손님이 주문을 하고, 점원이 주문을 받을 수 있도록 코드를 작성한다. 

# 객체 생성 
Jason = spicyramen(name="spicy", price=7, option = "onion")
Hana = shoyuramen(name ="shoyu", price =8, option = "egg")

# 메서드 호출
Jason.order()
Hana.order()

Jason.ordered()
Hana.ordered()

Jason.level_ask()
Hana.level_ask()

Jason.spicy_level()
Hana.shoyu_level()

 

<실행결과>

 

 

'파이썬' 카테고리의 다른 글

파이썬 객체 프로그래밍  (0) 2024.06.18
파이썬으로 브라우저 조작하기 (Playwright)  (0) 2024.06.18
파이썬 Methods  (1) 2024.06.08
파이썬의 str 메서드 (__str__)  (0) 2024.06.08
파이썬 클래스 이해하기  (2) 2024.06.08