클래스에서 self란?

  • 만들어지고 있는, 혹은 초기화되고 있는 실제 객체
  • self는 파이썬 클래스의 인스턴스 메소드에서 객체를 참조하는데 사용되는 관례상의 첫 번째 매개변수이며, 이를 통해 메소드 내에서 인스턴스 변수나 다른 메소드에 액세스할 수 있다.
    (현재 객체의 참조를 자동으로 받게 됨)
  • self를 사용하지 않으면 인스턴스의 속성이나 메소드에 액세스할 수 없게 되므로, 객체 지향 프로그래밍에서 중요한 기능이 제한됨
  • self라는 이름을 반드시 사용해야 하는 것은 아님.
    관례로 사용되는 이름일 뿐, 다른 이름을 사용할 수도 있음. 그러나 대부분의 파이썬 개발자는 이 관례를 따르기 때문에 다른 이름을 사용하면 코드의 가독성이 떨어질 수 있다.

self를 사용하는 여러 상황들

1

2

3

4


OOP 커피머신 코드

1) 클래스 객체에 저장
2) 리포트 메소드 호출

💡객체명은 주로 소문자와 스네이크 표기법(ex: coffee_maker)을 씀
보통 객체명은 클래스명과 같지만 소문자,표기법을 다르게 해서 구분

3) 사용자에게 무엇을 원하는지 묻기

  • 메뉴 객체 만들기
  • while문 생성 (기계 on/off 설정)
  • 아이템 선택 질문 리스트 출력 메소드 호출
  • 관리자 모드 off와 report 메소드 호출

4) 재료가 충분한지 확인

  • 메뉴 항목 찾는 메소드(매개변수: 선택질문에서 받은 값) 변수 선언
  • 재료확인 메소드(매개변수: 선택된 메뉴 변수)
    5) 재료가 충분할 때 사용자에게 돈을 받고 동전을 처리하고 거래가 성공적인지 확인
    6) 커피 만들기 (재료 차감 + 메시지 출력)


Final Code

from menu import Menu, MenuItem
from coffee_maker import CoffeeMaker
from money_machine import MoneyMachine

money_machine = MoneyMachine()
coffee_maker = CoffeeMaker()
menu = Menu()

is_on = True

while is_on:
    options = menu.get_items()
    choice = input(f"What would you like? ({options}): ")
    if choice == "off":
        is_on = False
    elif choice == "report":
        coffee_maker.report()
        money_machine.report()
    else:
        drink = menu.find_drink(choice)
        if coffee_maker.is_resource_sufficient(drink) and money_machine.make_payment(drink.cost):
            coffee_maker.make_coffee(drink)



Day17 : Creating Classes

파이썬에서 클래스를 만드는 방법

class Name:
  

5

  • 클래스 명은 모든 단어의 첫 번째 글자가 대문자여야 함(파스칼 케이스)
    🐪카멜케이스는 두 번째 단어부터 대문자


속성, 클래스 생성자, init()함수 활용하기

클래스의 속성은 어떻게 만드는가?

객체로 들어가서 속성 추가

user_1.id = "001"
user_1.username = "angela"

### Constructor

생성자는 클래스의 일부로 객체가 생성될 때 무슨 일이 일어나야 하는지 명시할 수 있게 함
프로그래밍에서 객체 초기화로도 알려져 있음
객체가 초기화될 때 변수나 카운터의 시작 값을 지정할 수 있다.

생성자를 만들려면

class Car:
    def __init__(self):
        # initialise attributes
        # 밑줄을 넣어 파이썬 인터프리터가 특별한 기능을 가진 메소드로 인식하게 함

⭐️ 클래스에서 새로운 객체를 만들 때마다 init함수가 호출됨
⭐️ 같은 속성을 가지는 객체를 많이 만들 때 이용하면 좋음

6


클래스에 메소드 추가하기

  • 속성(attributes) : 객체가 가지는 것들
  • 메소드(mothod) : 객체가 하는 것들, 객체 내 함수
    함수와 다르게 항상 첫 매개변수로 self가 있어야 함
    메소드 호출시 호출한 객체를 파악할 수 있다.

7



퀴즈게임 프로젝트(True or False)

질문 클래스 만들기

8


데이터로부터 질문 객체 리스트 만들기

들여쓰기 팁

9

10